您好,登錄后才能下訂單哦!
這篇文章運(yùn)用簡單易懂的例子給大家介紹怎么實(shí)現(xiàn)在C#中讀取Cookies,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
鏈接:
一 、寫入Cookie
1. Name 和 Value 屬性由程序設(shè)定,默認(rèn)值都是空引用。
2. Domain屬性的默認(rèn)值為當(dāng)前URL的域名部分,不管發(fā)出這個cookie的頁面在哪個目錄下的。
Domain屬性缺省就是www.kent.com ,可以由程序設(shè)置此屬性為需要的值。
3. Path屬性的默認(rèn)值是根目錄,即 ”/” ,不管發(fā)出這個cookie的頁面在哪個目錄下的??梢杂沙绦蛟O(shè)置為一定的路徑來進(jìn)一步限制此cookie的作用范圍。
4. Expires 屬性,這個屬性設(shè)置此Cookie 的過期日期和時間。如果沒有設(shè)置Cookie 的有效期(默認(rèn)設(shè)置),也可以創(chuàng)建 Cookie,但它不會保存到用戶的硬盤上,而是會成為用戶會話信息的一部分,關(guān)閉瀏覽器或會話超時這個Cookie即會消失,這種Cookie稱作非永久性的 Cookie。存放SessionID的Cookie就是這樣的一種Cookie,它不存放在硬盤上,只存在內(nèi)存之中。
5. 將要發(fā)出的Cookie附加到Response的Cookies屬性中就可以將此Cookie發(fā)送到客戶端:Reponse.Cookies.Add(Cookie)
6. Domain屬性+Path屬性 相同的所有Cookie 在客戶端都存在一個文件中,Cookie之間以”*”分割。每個Cookie的第一行是 Cookie 的名稱,第二行是值,第三行是Domain屬性+Path屬性組成的一個字符串,指示此Cookie的作用域,其余各行則包含 Cookie 的日常處理信息,例如過期日期和時間。Cookie 中還有一個簡單的校驗(yàn)和,如果更改 Cookie 名稱或值的長度,瀏覽器就會檢測到修改并刪除該 Cookie。
二 、讀取Cookie
1. Request.Cookies 屬性中包含了客戶端發(fā)送到服務(wù)器的所有Cookie的集合,只有在請求URL的作用范圍內(nèi)的Cookie才會被瀏覽器連同Http請求一起發(fā)送到服務(wù)器。
2. Name 和 Value 屬性和子鍵的值很容易讀到。
3. Domain 和 Path 屬性 是讀不到的,讀Domain屬性永遠(yuǎn)是””,讀Path屬性永遠(yuǎn)是 ”/” 。本來這些屬性的用途很有限。如果您的頁面與 Cookie 不在相同的域,您根本就不會在頁面的位置接收到該 Cookie。
4. 也無法讀取Cookie 的過期日期和時間。事實(shí)上,當(dāng)瀏覽器向服務(wù)器發(fā)送Cookie 信息時,瀏覽器并未將過期信息包括在內(nèi)。您可以讀取 Expires 屬性,但總是返回為零的日期/時間值。Expires 屬性的主要作用是幫助瀏覽器執(zhí)行有關(guān) Cookie 保存的日常管理。從服務(wù)器的角度來看,Cookie 要么存在要么不存在,所以對服務(wù)器而言,有效期并不是有用的信息。所以,瀏覽器在發(fā)送 Cookie 時并不提供此信息。如果您需要 Cookie 的過期日期,就必須重新設(shè)置。
三 、修改和刪除 Cookie
1. 其實(shí)你不能直接修改一個Cookie,是創(chuàng)建一個同名的 Cookie,并把該 Cookie發(fā)送到瀏覽器,覆蓋客戶機(jī)上舊的 Cookie。
2. 同樣您無法直接將其刪除一個Cookie,可以通過修改一個Cookie達(dá)到讓瀏覽器幫你刪除Cookie的目的,修改Cookie的有效期為過去的某個時間,當(dāng)瀏覽器檢查Cookie 的有效期時,就會刪除這個已過期的 Cookie。修改有效期刪除Cookie
四 、Cookie同Session的關(guān)系
1. asp.net中Session可以采用cookie 和cookieless兩種方法,cookieless方式是將SessionID放在URL中在客戶端和服務(wù)端中來回傳遞,不需要用到cookie,在這里不討論這個方式。
2. 在asp.net中客戶第一次請求一個URL,服務(wù)器給這個客戶生成一個SessionID,并以非永久性的 Cookie發(fā)送到客戶端。
3. 非永久性的 Cookie只有在瀏覽器關(guān)閉后這些Cookie才隨之消失,Session的超時判斷是這樣的過程:
3.1 第一次客戶端訪問服務(wù)器,會得到一個SessionID,以非永久性的 Cookie發(fā)送到客戶端。
3.2 在這個瀏覽器關(guān)閉之前訪問這個URL,瀏覽器都會把這個SessionID發(fā)送到服務(wù)端,服務(wù)端根據(jù)SessionID來維持對應(yīng)此客戶的服務(wù)端的各種狀態(tài)(就是Session中保存的各種值),在web應(yīng)用程序中可以對這些Session進(jìn)行操作。
3.3 服務(wù)端維護(hù)此SessionID的過期時間,IIS中可以設(shè)置Session的超時時間。每次請求都將導(dǎo)致服務(wù)端將此SessioID的過期時間延長一個設(shè)置的超時時間。
3.4 當(dāng)服務(wù)端發(fā)現(xiàn)某個SessionID已經(jīng)過時,即某個客戶已經(jīng)在設(shè)置的超時時間內(nèi)沒有再次訪問此站點(diǎn),即將此SessionID,連同跟此SessionID相關(guān)的所有Session變量刪除。
3.5 客戶端的瀏覽器未關(guān)閉前,并不知道服務(wù)端已經(jīng)將這個SessionID刪除,客戶端依舊發(fā)送此SessionID的cookie到服務(wù)端,只是此時的服務(wù)端已經(jīng)不認(rèn)識此SessionID了,會將此用戶當(dāng)做新用戶,再次分配一個新的SessionID。
cookies的創(chuàng)建:
在客戶端創(chuàng)建一個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);
創(chuàng)建帶有子鍵的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);
讀?。?/p>
Request.Cookies["username"] HttpContext.Current.Request.Cookies["username"]
只要不給cookie設(shè)置過期時間,cookie在瀏覽器關(guān)閉的時候自動失效
刪除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">有效天數(shù)</param> /// <returns></returns> public bool setCookie(string strName, string strValue, int strDay) { try { HttpCookie Cookie = new HttpCookie(strName); //Cookie.Domain = ".xxx.com";//當(dāng)要跨域名訪問的時候,給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";//當(dāng)要跨域名訪問的時候,給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">有效天數(shù)</param> /// <returns></returns> public bool setCookie(string strName, string strValue, int strDay) { try { HttpCookie Cookie = new HttpCookie(strName); //Cookie.Domain = ".xxx.com";//當(dāng)要跨域名訪問的時候,給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";//當(dāng)要跨域名訪問的時候,給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");//刪除
注意:當(dāng)Cookie存中文出現(xiàn)亂碼,則在存放時給中文編碼,如Cookie.setCookie("name", Server.UrlEncode("aaa"),1),讀取時解碼即可
另外:只要不給cookie設(shè)置過期時間,cookie在瀏覽器關(guān)閉的時候自動失效
關(guān)于怎么實(shí)現(xiàn)在C#中讀取Cookies就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。