ASP.NET Cookie概念、CURD操作、原理、實際運用


會話就WEB開發來說,一個會話就是你通過瀏覽器與服務器之間的一次通話,只不過這種通話是以用瀏覽器瀏覽的方式來實現的.

就會話的應用來說,一般會話是用來識別用戶的,比如你可以使用會話級變量記錄當前用戶已經輸入的用戶名密碼,這樣就不用他每次輸入了,還可以用來記錄一些其他的與當前這一次通話有關的信息。一旦你關閉了瀏覽
器,雖然會話沒有結束,但是你重新打開瀏覽器時,已經不能再次利用上一次的會話了,它會新建一個會話。而服務器會根據預先的設置在超時后自動關閉會話,你也可以手動結束會話。

一、Cookie的基本概念

Cookie是客戶端技術,服務器把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據去。

關於Cookie的知識還需要了解以下幾點。

1、Cookie只是一段字符串,並不能執行。

2、大多數瀏覽器規定Cookie大小不超過4K,每個站點能保存的Cookie不超過20個,所有站點保存的Cookie總和不超過300個。

3、除了Cookie外,幾乎沒有其他的方法在客戶端的機器上寫入數據(就連Cookie的寫入操作也是瀏覽器進行的)。當然,連Cookie都可以通過瀏覽器安全配置來禁止。

   微軟Internet Explorer 設置方法:工具 > Internet選項 > 隱私 頁 調節滑塊或者點擊“高級”,進行設置.

4、在使用Cookie時,必須意識到其固有的安全弱點。Cookie畢竟是存放於客戶端的。因此不要在Cookie中保存保密信息,如用戶名、密碼、信用卡號等。在Cookie中不要保存不應該由用戶掌握的內容,也不要保存可能被其他竊取Cookie的人控制的內容。

5、Cookie文件存放地址(IE瀏覽器查看 工具 > Internet選項 > 常規選項卡-設置-查看文件):

Cookie文件存放地址

 

二、ASP.NET對Cookie的CURD操作

代碼如下:

         //寫入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使用的注意事項

 Cookie雖然是一個簡單實用的對象,但是我們也要注意Cookie的工作原理、大小限制以及安全性等,大致可以歸納為以下幾點。

1、存儲的物理位置。客戶端的Cookies文件夾內。

2、存儲的類型限制。字符串。

3、狀態使用的范圍。當前請求上下文的上下文都能訪問到Cookie,Cookie對每個用戶來說都是獨立的。

4、存儲的大小限制。每個Cookie不超過4K數據。每個網站不超過20個Cookie。所有網站的Cookie總和不超過300個。

5、生命周期。每個Cookie都有自己的過期時間,超過了過期時間后失效。

6、安全與性能。存儲在客戶端,安全性差。對於敏感數據建議加密后存儲。

7、優點缺點與注意事項。可以很方便地關聯網站和用戶,長久保存用戶設置。

 

五、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頁面
            }

 


免責聲明!

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



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