連結:
一、寫入Cookie
1. Name 與Value 屬性由程式設定,預設值都是空引用。
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 第一次客戶端訪問伺服器,會得到一個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在瀏覽器關閉的時候自動失效
以上是C#中關於Cookies的讀取實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!