HttpCookie類


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如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM