C#中Cookies的讀取

連接:html

一 、寫入Cookie
  1. Name 和 Value 屬性由程序設定,默認值都是空引用。
  2. Domain屬性的默認值爲當前URL的域名部分,無論發出這個cookie的頁面在哪一個目錄下的。
  例如, http://www.kent.com/application1/login.aspx 頁面中發出一個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); 
 
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");//刪除
 
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在瀏覽器關閉的時候自動失效 
 
轉載鏈接: https://www.cnblogs.com/dachengxiaomeng/p/7474189.html
相關文章
相關標籤/搜索