HttpCookie類專門由C#用於讀取和寫入Cookie的類。
Cookie的詳細說明見:http://www.cnblogs.com/kissdodog/archive/2013/01/02/2842387.html
jQuery處理Cookie見:http://www.cnblogs.com/kissdodog/archive/2012/12/14/2818827.html
一、構造函數
HttpCookie(String) //創建並命名Cookie
HttpCookie(String,String) //創建命名Cookie並為其賦值
二、屬性
Domain //獲取或設置Cookie的作用域 接受或返回一個String值
Expires //獲取或設置Cookie的有效時間 接受或返回一個DateTime值
HasKeys //獲取一個值,通過該值指示Cookie是否含有子鍵,返回一個bool值
HttpOnly //獲取或設置一個值,該值指定Cookie是否可以通過客戶端腳本訪問,接受或返回一個bool值
Name //獲取或設置Cookie的名稱,該值接受或返回一個String值
Path //獲取或設置該Cookie作用路徑,接受或返回一個String值
Secure //獲取或設置Cookie是否安全傳輸(即僅通過Https傳送),接受或返回一個bool值
Value //獲取或設置單個Cookie的值,接受或返回一個String
Values //獲取單個Cookie所包含的鍵值對的集合,返回一個
示例,C#寫入一個Cookie,在前台通過jQuery讀取。后端代碼
public ActionResult Index() { HttpCookie hc = new HttpCookie("userName","admin"); hc.Path = "/"; hc.Expires = DateTime.Now.AddDays(7); Response.SetCookie(hc); return View(); } public ActionResult TestCookie() { return View(); }
前台頁面代碼Home/TestCookie.cshtml:
<script type="text/javascript" src="/jquery-1.8.2.min.js"></script> <script src="/jscookie.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { if ($.cookie("userName")) { alert($.cookie("userName")); } else { alert("cookie沒有寫入"); } }) </script>
先打開路徑Home/Index,讓Cookie寫入,然后再打開Home/TestCookie,彈出admin。
再來一個HttpOnly的Demo,后台代碼稍作修改如下:
public ActionResult Index() { HttpCookie hc = new HttpCookie("userName","張三"); hc.Path = "/"; hc.Expires = DateTime.Now.AddDays(7); hc.HttpOnly = true; Response.Cookies.Add(hc); HttpCookie hc1 = new HttpCookie("userName1", "李四"); hc1.Path = "/"; hc1.Expires = DateTime.Now.AddDays(7); hc1.HttpOnly = false; Response.Cookies.Add(hc1); return View(); } public ActionResult TestCookie() { return View(); }
TestCookie視圖代碼如下:
<script type="text/javascript" src="/jquery-1.8.2.min.js"></script> <script src="/jscookie.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { if ($.cookie("userName")) { alert($.cookie("userName")); } else { alert("userName讀取不了"); } if ($.cookie("userName1")) { alert($.cookie("userName1")); } else { alert("userName1讀取不了"); } }) </script>
瀏覽器顯示如下:
從google瀏覽器里面可以看到,其實兩個值瀏覽器都是有的,但是通過js讀取不了了。兩者的差別在google瀏覽器里只是HTTP多了一個勾。因此得出結論,當設置了HttpOnly為true之后,js就無法再讀取cookie,但是跟瀏覽器的版本有關,較舊的瀏覽器並不支持該設置。
這個功能其實是非常有用的,可以幫助減輕腳本跨站點時所導致的 Cookie 被盜取的威脅。如果兼容的瀏覽器接收某個 Cookie,而該 Cookie 的 HttpOnlyCookies 已設置為 true,則客戶端腳本無法訪問該 Cookie。因此你懂的,如果你將賬號密碼等信息存入cookie里面的話,那么最好就加個HttpOnlyCookies。
再來一個Values與HasKeys的,只跟服務器后台有關,與視圖無關,代碼如下:
public ActionResult Index() { HttpCookie MyCookie = new HttpCookie("Cookie1"); MyCookie.Values["Val1"] = "第一個"; MyCookie.Values["Val2"] = "第二個"; MyCookie.Values["Val3"] = "第三個"; MyCookie.Path = "/"; Response.Cookies.Add(MyCookie); return View(); } public ActionResult TestCookie() { HttpCookie MyCookie = System.Web.HttpContext.Current.Request.Cookies["Cookie1"]; string Cookies = ""; if (MyCookie.HasKeys) { NameValueCollection MyCookieValues = new NameValueCollection(MyCookie.Values); String[] MyKeyNames = MyCookieValues.AllKeys; int i = 0; foreach (string KeyName in MyKeyNames) { Cookies += KeyName + ":"; Cookies += MyCookieValues.Get(i); i++; } } return Content(Cookies); }
顯示效果如下:
google瀏覽器里的cookie如下: