怎么實(shí)現(xiàn)在C#中讀取Cookies-創(chuàng)新互聯(lián)

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹怎么實(shí)現(xiàn)在C#中讀取Cookies,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到觀山湖網(wǎng)站設(shè)計(jì)與觀山湖網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋觀山湖地區(qū)。

鏈接:

一 、寫入Cookie

  1. Name 和 Value 屬性由程序設(shè)定,默認(rèn)值都是空引用。

  2. Domain屬性的默認(rèn)值為當(dāng)前URL的域名部分,不管發(fā)出這個(gè)cookie的頁(yè)面在哪個(gè)目錄下的。

Domain屬性缺省就是www.kent.com ,可以由程序設(shè)置此屬性為需要的值。

  3. Path屬性的默認(rèn)值是根目錄,即 ”/” ,不管發(fā)出這個(gè)cookie的頁(yè)面在哪個(gè)目錄下的??梢杂沙绦蛟O(shè)置為一定的路徑來(lái)進(jìn)一步限制此cookie的作用范圍。

  4. Expires 屬性,這個(gè)屬性設(shè)置此Cookie 的過(guò)期日期和時(shí)間。如果沒(méi)有設(shè)置Cookie 的有效期(默認(rèn)設(shè)置),也可以創(chuàng)建 Cookie,但它不會(huì)保存到用戶的硬盤上,而是會(huì)成為用戶會(huì)話信息的一部分,關(guān)閉瀏覽器或會(huì)話超時(shí)這個(gè)Cookie即會(huì)消失,這種Cookie稱作非永久性的 Cookie。存放SessionID的Cookie就是這樣的一種Cookie,它不存放在硬盤上,只存在內(nèi)存之中。

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

  6. Domain屬性+Path屬性 相同的所有Cookie 在客戶端都存在一個(gè)文件中,Cookie之間以”*”分割。每個(gè)Cookie的第一行是 Cookie 的名稱,第二行是值,第三行是Domain屬性+Path屬性組成的一個(gè)字符串,指示此Cookie的作用域,其余各行則包含 Cookie 的日常處理信息,例如過(guò)期日期和時(shí)間。Cookie 中還有一個(gè)簡(jiǎn)單的校驗(yàn)和,如果更改 Cookie 名稱或值的長(zhǎng)度,瀏覽器就會(huì)檢測(cè)到修改并刪除該 Cookie。

 二 、讀取Cookie

  1. Request.Cookies 屬性中包含了客戶端發(fā)送到服務(wù)器的所有Cookie的集合,只有在請(qǐng)求URL的作用范圍內(nèi)的Cookie才會(huì)被瀏覽器連同Http請(qǐng)求一起發(fā)送到服務(wù)器。

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

  3. Domain 和 Path 屬性 是讀不到的,讀Domain屬性永遠(yuǎn)是””,讀Path屬性永遠(yuǎn)是 ”/” 。本來(lái)這些屬性的用途很有限。如果您的頁(yè)面與 Cookie 不在相同的域,您根本就不會(huì)在頁(yè)面的位置接收到該 Cookie。

  4. 也無(wú)法讀取Cookie 的過(guò)期日期和時(shí)間。事實(shí)上,當(dāng)瀏覽器向服務(wù)器發(fā)送Cookie 信息時(shí),瀏覽器并未將過(guò)期信息包括在內(nèi)。您可以讀取 Expires 屬性,但總是返回為零的日期/時(shí)間值。Expires 屬性的主要作用是幫助瀏覽器執(zhí)行有關(guān) Cookie 保存的日常管理。從服務(wù)器的角度來(lái)看,Cookie 要么存在要么不存在,所以對(duì)服務(wù)器而言,有效期并不是有用的信息。所以,瀏覽器在發(fā)送 Cookie 時(shí)并不提供此信息。如果您需要 Cookie 的過(guò)期日期,就必須重新設(shè)置。

 三 、修改和刪除 Cookie

  1. 其實(shí)你不能直接修改一個(gè)Cookie,是創(chuàng)建一個(gè)同名的 Cookie,并把該 Cookie發(fā)送到瀏覽器,覆蓋客戶機(jī)上舊的 Cookie。

  2. 同樣您無(wú)法直接將其刪除一個(gè)Cookie,可以通過(guò)修改一個(gè)Cookie達(dá)到讓瀏覽器幫你刪除Cookie的目的,修改Cookie的有效期為過(guò)去的某個(gè)時(shí)間,當(dāng)瀏覽器檢查Cookie 的有效期時(shí),就會(huì)刪除這個(gè)已過(guò)期的 Cookie。修改有效期刪除Cookie

 四 、Cookie同Session的關(guān)系

  1. asp.net中Session可以采用cookie 和cookieless兩種方法,cookieless方式是將SessionID放在URL中在客戶端和服務(wù)端中來(lái)回傳遞,不需要用到cookie,在這里不討論這個(gè)方式。

  2. 在asp.net中客戶第一次請(qǐng)求一個(gè)URL,服務(wù)器給這個(gè)客戶生成一個(gè)SessionID,并以非永久性的 Cookie發(fā)送到客戶端。

  3. 非永久性的 Cookie只有在瀏覽器關(guān)閉后這些Cookie才隨之消失,Session的超時(shí)判斷是這樣的過(guò)程:

  3.1 第一次客戶端訪問(wèn)服務(wù)器,會(huì)得到一個(gè)SessionID,以非永久性的 Cookie發(fā)送到客戶端。

  3.2 在這個(gè)瀏覽器關(guān)閉之前訪問(wèn)這個(gè)URL,瀏覽器都會(huì)把這個(gè)SessionID發(fā)送到服務(wù)端,服務(wù)端根據(jù)SessionID來(lái)維持對(duì)應(yīng)此客戶的服務(wù)端的各種狀態(tài)(就是Session中保存的各種值),在web應(yīng)用程序中可以對(duì)這些Session進(jìn)行操作。

  3.3 服務(wù)端維護(hù)此SessionID的過(guò)期時(shí)間,IIS中可以設(shè)置Session的超時(shí)時(shí)間。每次請(qǐng)求都將導(dǎo)致服務(wù)端將此SessioID的過(guò)期時(shí)間延長(zhǎng)一個(gè)設(shè)置的超時(shí)時(shí)間。

  3.4 當(dāng)服務(wù)端發(fā)現(xiàn)某個(gè)SessionID已經(jīng)過(guò)時(shí),即某個(gè)客戶已經(jīng)在設(shè)置的超時(shí)時(shí)間內(nèi)沒(méi)有再次訪問(wèn)此站點(diǎn),即將此SessionID,連同跟此SessionID相關(guān)的所有Session變量刪除。

  3.5 客戶端的瀏覽器未關(guān)閉前,并不知道服務(wù)端已經(jīng)將這個(gè)SessionID刪除,客戶端依舊發(fā)送此SessionID的cookie到服務(wù)端,只是此時(shí)的服務(wù)端已經(jīng)不認(rèn)識(shí)此SessionID了,會(huì)將此用戶當(dāng)做新用戶,再次分配一個(gè)新的SessionID。

cookies的創(chuàng)建:

在客戶端創(chuàng)建一個(gè)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的讀取:

無(wú)子鍵讀取:

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設(shè)置過(guò)期時(shí)間,cookie在瀏覽器關(guān)閉的時(shí)候自動(dòng)失效

刪除cookie修改時(shí)間即可: 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)要跨域名訪問(wèn)的時(shí)候,給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)要跨域名訪問(wèn)的時(shí)候,給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)要跨域名訪問(wèn)的時(shí)候,給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)要跨域名訪問(wèn)的時(shí)候,給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)亂碼,則在存放時(shí)給中文編碼,如Cookie.setCookie("name", Server.UrlEncode("aaa"),1),讀取時(shí)解碼即可

另外:只要不給cookie設(shè)置過(guò)期時(shí)間,cookie在瀏覽器關(guān)閉的時(shí)候自動(dòng)失效

關(guān)于怎么實(shí)現(xiàn)在C#中讀取Cookies就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站標(biāo)題:怎么實(shí)現(xiàn)在C#中讀取Cookies-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article32/gjdsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站改版、Google網(wǎng)站營(yíng)銷、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化