C#中關於Cookies的讀取執行個體詳解

來源:互聯網
上載者:User

C#中Cookies的讀取

連結:

一 、寫入Cookie

  1. Name 和 Value 屬性由程式設定,預設值都是Null 參考。

  2. Domain屬性的預設值為當前URL的網域名稱部分,不管發出這個cookie的頁面在哪個目錄下的。

Domain屬性預設就是www.kent.com ,可以由程式設定此屬性為需要的值。

  3. Path屬性的預設值是根目錄,即 ”/” ,不管發出這個cookie的頁面在哪個目錄下的。可以由程式設定為一定的路徑來進一步限制此cookie的作用範圍。

  4. Expires 屬性,這個屬性設定此Cookie 的到期日期和時間。如果沒有設定Cookie 的有效期間(預設設定),也可以建立 Cookie,但它不會儲存到使用者的硬碟上,而是會成為使用者會話資訊的一部分,關閉瀏覽器或會話逾時這個Cookie即會消失,這種Cookie稱作非永久性的 Cookie。存放SessionID的Cookie就是這樣的一種Cookie,它不存放在硬碟上,只存在記憶體之中。

  5. 將要發出的Cookie附加到Response的Cookies屬性中就可以將此Cookie發送到用戶端:Reponse.Cookies.Add(Cookie)

  6. Domain屬性+Path屬性 相同的所有Cookie 在用戶端都存在一個檔案中,Cookie之間以”*”分割。每個Cookie的第一行是 Cookie 的名稱,第二行是值,第三行是Domain屬性+Path屬性群組成的一個字串,指示此Cookie的範圍,其餘各行則包含 Cookie 的日常處理資訊,例如到期日期和時間。Cookie 中還有一個簡單的校正和,如果更改 Cookie 名稱或值的長度,瀏覽器就會檢測到修改並刪除該 Cookie。

 二 、讀取Cookie

  1. Request.Cookies 屬性中包含了用戶端發送到伺服器的所有Cookie的集合,只有在請求URL的作用範圍內的Cookie才會被瀏覽器連同Http請求一起發送到伺服器。

  2. Name 和 Value 屬性和子鍵的值很容易讀到。

  3. Domain 和 Path 屬性 是讀不到的,讀Domain屬性永遠是””,讀Path屬性永遠是 ”/” 。本來這些屬性的用途很有限。如果您的頁面與 Cookie 不在相同的域,您根本就不會在頁面的位置接收到該 Cookie。

  4. 也無法讀取Cookie 的到期日期和時間。事實上,當瀏覽器向伺服器發送Cookie 資訊時,瀏覽器並未將到期資訊包括在內。您可以讀取 Expires 屬性,但總是返回為零的日期/時間值。Expires 屬性的主要作用是協助瀏覽器執行有關 Cookie 儲存的日常管理。從伺服器的角度來看,Cookie 要麼存在要麼不存在,所以對伺服器而言,有效期間並不是有用的資訊。所以,瀏覽器在發送 Cookie 時並不提供此資訊。如果您需要 Cookie 的到期日期,就必須重新設定。

 三 、修改和刪除 Cookie

  1. 其實你不能直接修改一個Cookie,是建立一個同名的 Cookie,並把該 Cookie發送到瀏覽器,覆蓋客戶機上舊的 Cookie。

  2. 同樣您無法直接將其刪除一個Cookie,可以通過修改一個Cookie達到讓瀏覽器幫你刪除Cookie的目的,修改Cookie的有效期間為過去的某個時間,當瀏覽器檢查Cookie 的有效期間時,就會刪除這個已到期的 Cookie。修改有效期間刪除Cookie

 四 、Cookie同Session的關係

  1. asp.net中Session可以採用cookie 和cookieless兩種方法,cookieless方式是將SessionID放在URL中在用戶端和服務端中來回傳遞,不需要用到cookie,在這裡不討論這個方式。

  2. 在asp.net中客戶第一次請求一個URL,伺服器給這個客戶產生一個SessionID,並以非永久性的 Cookie發送到用戶端。

  3. 非永久性的 Cookie只有在瀏覽器關閉後這些Cookie才隨之消失,Session的逾時判斷是這樣的過程:

  3.1 第一次Client Access Server,會得到一個SessionID,以非永久性的 Cookie發送到用戶端。

  3.2 在這個瀏覽器關閉之前訪問這個URL,瀏覽器都會把這個SessionID發送到服務端,服務端根據SessionID來維持對應此客戶的服務端的各種狀態(就是Session中儲存的各種值),在web應用程式中可以對這些Session進行操作。

  3.3 服務端維護此SessionID的到期時間,IIS中可以設定Session的逾時時間。每次請求都將導致服務端將此SessioID的到期時間延長一個設定的逾時時間。

  3.4 當服務端發現某個SessionID已經過時,即某個客戶已經在設定的逾時時間內沒有再次訪問此網站,即將此SessionID,連同跟此SessionID相關的所有Session變數刪除。

  3.5 用戶端的瀏覽器未關閉前,並不知道服務端已經將這個SessionID刪除,用戶端依舊發送此SessionID的cookie到服務端,只是此時的服務端已經不認識此SessionID了,會將此使用者當做新使用者,再次分配一個新的SessionID。

cookies的建立:

在用戶端建立一個username的cookies,其值為gjy,有效期間為1天.

方法1:

Response.Cookies["username"].Value="zxf";Response.Cookies["username"].Expires=DateTime.Now.AddDays(1);

方法2:

System.Web.HttpCookie newcookie=new HttpCookie("username");newcookie.Value="gjy";newcookie.Expires=DateTime.Now.AddDays(1);Response.AppendCookie(newcookie);

建立帶有子鍵的cookies:

System.Web.HttpCookie newcookie=new HttpCookie("user");newcookie.Values["username"]="zxf";newcookie.Values["password"]="111";newcookie.Expires=DateTime.Now.AddDays(1);Response.AppendCookie(newcookie);

或者:

System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);

cookies的讀取:

無子鍵讀取:

if(Request.Cookies["username"]!=null){Response.Write(Server.UrlDecode(Request.Cookies["username"]));

或者:

HttpContext.Current.Request.Cookies[strCookieName]}

有子鍵讀取:

if(Request.Cookies["user"]!=null){Response.Write(Server.UrlDecode(Request.Cookies["user"]["username"].Value));Response.Write(Server.UrlDecode(Request.Cookies["user"]["password"].Value));

兩種添加與讀取方式:

添加:

Response.AppendCookie(newcookie);System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);

讀取:

Request.Cookies["username"]HttpContext.Current.Request.Cookies["username"]

只要不給cookie設定到期時間,cookie在瀏覽器關閉的時候自動失效

刪除cookie修改時間即可: Cookie.Expires = DateTime.Now.AddDays(-1);

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls; public class Cookie{    /// <summary>    /// Cookies賦值    /// </summary>    /// <param name="strName">主鍵</param>    /// <param name="strValue">索引值</param>    /// <param name="strDay">有效天數</param>    /// <returns></returns>    public bool setCookie(string strName, string strValue, int strDay)    {        try        {            HttpCookie Cookie = new HttpCookie(strName);            //Cookie.Domain = ".xxx.com";//當要跨網域名稱訪問的時候,給cookie指定網域名稱即可,格式為.xxx.com            Cookie.Expires = DateTime.Now.AddDays(strDay);            Cookie.Value = strValue;            System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);            return true;        }        catch        {            return false;        }    }    /// <summary>    /// 讀取Cookies    /// </summary>    /// <param name="strName">主鍵</param>    /// <returns></returns>     public string getCookie(string strName)    {        HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies[strName];        if (Cookie != null)        {            return Cookie.Value.ToString();        }        else        {            return null;        }    }    /// <summary>    /// 刪除Cookies    /// </summary>    /// <param name="strName">主鍵</param>    /// <returns></returns>    public bool delCookie(string strName)    {        try        {            HttpCookie Cookie = new HttpCookie(strName);            //Cookie.Domain = ".xxx.com";//當要跨網域名稱訪問的時候,給cookie指定網域名稱即可,格式為.xxx.com            Cookie.Expires = DateTime.Now.AddDays(-1);            System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);            return true;        }        catch        {            return false;        }    }}


樣本:

Cookie Cookie = new Cookie();Cookie.setCookie("name", "aaa",1);//賦值Cookie.getCookie("name");//取值Cookie.delCookie("name");//刪除
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls; public class Cookie{    /// <summary>    /// Cookies賦值    /// </summary>    /// <param name="strName">主鍵</param>    /// <param name="strValue">索引值</param>    /// <param name="strDay">有效天數</param>    /// <returns></returns>    public bool setCookie(string strName, string strValue, int strDay)    {        try        {            HttpCookie Cookie = new HttpCookie(strName);            //Cookie.Domain = ".xxx.com";//當要跨網域名稱訪問的時候,給cookie指定網域名稱即可,格式為.xxx.com            Cookie.Expires = DateTime.Now.AddDays(strDay);            Cookie.Value = strValue;            System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);            return true;        }        catch        {            return false;        }    }    /// <summary>    /// 讀取Cookies    /// </summary>    /// <param name="strName">主鍵</param>    /// <returns></returns>     public string getCookie(string strName)    {        HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies[strName];        if (Cookie != null)        {            return Cookie.Value.ToString();        }        else        {            return null;        }    }    /// <summary>    /// 刪除Cookies    /// </summary>    /// <param name="strName">主鍵</param>    /// <returns></returns>    public bool delCookie(string strName)    {        try        {            HttpCookie Cookie = new HttpCookie(strName);            //Cookie.Domain = ".xxx.com";//當要跨網域名稱訪問的時候,給cookie指定網域名稱即可,格式為.xxx.com            Cookie.Expires = DateTime.Now.AddDays(-1);            System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);            return true;        }        catch        {            return false;        }    }}

樣本:

Cookie Cookie = new Cookie();Cookie.setCookie("name", "aaa",1);//賦值Cookie.getCookie("name");//取值Cookie.delCookie("name");//刪除

注意:當Cookie存中文出現亂碼,則在存放時給中文編碼,如Cookie.setCookie("name", Server.UrlEncode("aaa"),1),讀取時解碼即可

另外:只要不給cookie設定到期時間,cookie在瀏覽器關閉的時候自動失效

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.