會話就WEB開發來講,一個會話就是你經過瀏覽器與服務器之間的一次通話,只不過這種通話是以用瀏覽器瀏覽的方式來實現的.web
就會話的應用來講,通常會話是用來識別用戶的,好比你可使用會話級變量記錄當前用戶已經輸入的用戶名密碼,這樣就不用他每次輸入了,還能夠用來記錄一些其餘的與當前這一次通話有關的信息。一旦你關閉了瀏覽
器,雖然會話沒有結束,可是你從新打開瀏覽器時,已經不能再次利用上一次的會話了,它會新建一個會話。而服務器會根據預先的設置在超時後自動關閉會話,你也能夠手動結束會話。瀏覽器
Cookie是客戶端技術,服務器把每一個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據去。安全
關於Cookie的知識還須要瞭解如下幾點。服務器
一、Cookie只是一段字符串,並不能執行。cookie
二、大多數瀏覽器規定Cookie大小不超過4K,每一個站點能保存的Cookie不超過20個,全部站點保存的Cookie總和不超過300個。工具
三、除了Cookie外,幾乎沒有其餘的方法在客戶端的機器上寫入數據(就連Cookie的寫入操做也是瀏覽器進行的)。固然,連Cookie均可以經過瀏覽器安全配置來禁止。post
微軟Internet Explorer 設置方法:工具 > Internet選項 > 隱私 頁 調節滑塊或者點擊「高級」,進行設置.性能
四、在使用Cookie時,必須意識到其固有的安全弱點。Cookie畢竟是存放於客戶端的。所以不要在Cookie中保存保密信息,如用戶名、密碼、信用卡號等。在Cookie中不要保存不該該由用戶掌握的內容,也不要保存可能被其餘竊取Cookie的人控制的內容。網站
五、Cookie文件存放地址(IE瀏覽器查看 工具 > Internet選項 > 常規選項卡-設置-查看文件):加密
代碼以下:
//寫入Cookie三種方式 //方式1 var cookie = new HttpCookie("name", "joye888"); Response.Cookies.Add(cookie); //方式2 Response.Cookies["name1"].Value = "joye8881"; Response.Cookies["name1"].Expires = DateTime.MaxValue; //方式3 var acookie = new HttpCookie("name2"); acookie.Value = "joye8882"; acookie.Expires = DateTime.MaxValue; Response.Cookies.Add(acookie); //寫入多值Cookie //方式1: //Response.Cookies["userinfo"]["name"].Value = "joye888"; //Response.Cookies["userinfo"].Expires = DateTime.MaxValue; //方式2: HttpCookie cookie2 = new HttpCookie("userinfo"); cookie2.Values["name"] = "joye888"; cookie2.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(cookie2); //讀取Cookie的值以前,應該確保該 Cookie 確實存在。不然,您將獲得一個異常 //讀取Cookie var httpCookie = Request.Cookies["name1"]; if (httpCookie != null) { var name = httpCookie.Value; } //多值Cookie的讀取 var httpCookie1 = Request.Cookies["userInfo"]; if (httpCookie1 != null) { var name1 = httpCookie1["name"]; } //修改和刪除cookie //修改的方法與建立方法相同 var cookieEdit = new HttpCookie("name", "joye888Edit"); cookieEdit.Expires = DateTime.Now.AddDays(-1); //將其有效期設置爲過去的某個日期。當瀏覽器檢查 Cookie 的有效期時,就會刪除這個已過時的 Cookie。 Response.Cookies.Add(cookieEdit); //若是有主站及二級域名站且cookie要共享的話則要加入以下設置 cookie.Domain = ".cnblog.com"; cookie.Path = "/";
public static void AddCookie(string key,string value,int expires) { var acookie = new HttpCookie(key); acookie.Value = value; acookie.Domain = ".cnblog.com"; acookie.Path = "/"; acookie.Expires = DateTime.Now.AddMinutes(expires); HttpContext.Current.Response.Cookies.Add(acookie); } public static string GetCookie(string key) { var httpCookie = HttpContext.Current.Request.Cookies[key]; if (httpCookie != null) { return httpCookie.Value; } return ""; }
瀏覽器查看寫入的Cookie,F12:
Cookie雖然是一個簡單實用的對象,可是咱們也要注意Cookie的工做原理、大小限制以及安全性等,大體能夠概括爲如下幾點。
一、存儲的物理位置。客戶端的Cookies文件夾內。
二、存儲的類型限制。字符串。
三、狀態使用的範圍。當前請求上下文的上下文都能訪問到Cookie,Cookie對每一個用戶來講都是獨立的。
四、存儲的大小限制。每一個Cookie不超過4K數據。每一個網站不超過20個Cookie。全部網站的Cookie總和不超過300個。
五、生命週期。每一個Cookie都有本身的過時時間,超過了過時時間後失效。
六、安全與性能。存儲在客戶端,安全性差。對於敏感數據建議加密後存儲。
七、優勢缺點與注意事項。能夠很方便地關聯網站和用戶,長久保存用戶設置。
登陸記住用戶名和密碼示例
頁面代碼:
<body> <form id="form1" method="post" action="rembPage.aspx"> <div> 賬號: <input type="text" name="userName" /><br /> 密碼 :<input type="password" name="pass" /><br /> 記住我: <input type="checkbox" value="rem" name="sele1" /><br /> <input type="submit" value=" 登陸 " /> </div> </form> </body>
實現代碼:
if (Request.Cookies["userName"] == null && Request.Cookies["passWord"] == null) //判斷是否存在cookie,若是存在表示上次選擇了記住我 { if (Request.Form["userName"] != null && Request.Form["pass"] != null) { String userName = Request.Form["userName"]; String userPassWord = Request.Form["pass"]; if (userName == "admin" && userPassWord == "123") { if (Request.Form["sele1"] != null) { HttpCookie cookieUserName = new HttpCookie("userName", userName); //建立賬號的cookie實例 HttpCookie cookiePassWord = new HttpCookie("passWord", userPassWord); cookieUserName.Expires = DateTime.Now.AddDays(2); //設置賬號cookie的過時時間,當前時間算日後推兩天 cookiePassWord.Expires = new DateTime(2012, 5, 27); //設置密碼cookie的過時時間,過時時間爲2012年5月27日 Response.Cookies.Add(cookieUserName); //將建立的cookieUserName文件輸入到瀏覽器端 Response.Cookies.Add(cookiePassWord); Response.Redirect("Index.aspx"); //跳轉到你想要的頁面 } else { Response.Redirect("Index.aspx");//即使不記住密碼也要跳轉 } } } } else { Response.Redirect("Index.aspx");//若是記住密碼,第二次登陸將直接進入Index.aspx頁面 }