目錄
C#中Cookies的讀取
首頁 後端開發 C#.Net教程 C#中關於Cookies的讀取實例詳解

C#中關於Cookies的讀取實例詳解

Sep 07, 2017 pm 03:06 PM
.net cookies

C#中Cookies的讀取

連結:

一、寫入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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C#的就業前景如何 C#的就業前景如何 Oct 19, 2023 am 11:02 AM

無論您是初學者還是有經驗的專業人士,掌握C#將為您的職業發展鋪平道路。

分享幾個.NET開源的AI和LLM相關專案框架 分享幾個.NET開源的AI和LLM相關專案框架 May 06, 2024 pm 04:43 PM

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

面向開發人員的.NET效能最佳化技術 面向開發人員的.NET效能最佳化技術 Sep 12, 2023 am 10:43 AM

如果你是.NET開發者,你必須意識到在交付高品質軟體方面,優化功能和效能的重要性。透過熟練使用提供的資源並減少網站載入時間,你不僅為使用者創造了愉快的體驗,還能減少基礎設施成本。

Java框架與.NET框架的效能差異 Java框架與.NET框架的效能差異 Jun 03, 2024 am 09:19 AM

在高並發請求處理方面,.NETASP.NETCoreWebAPI效能優於JavaSpringMVC,原因包括:AOT提前編譯,減少啟動時間;更精細的記憶體管理,由開發人員負責分配和釋放物件記憶體。

Nginx轉送遺失Cookies如何解決 Nginx轉送遺失Cookies如何解決 May 15, 2023 pm 09:10 PM

一.遺失Cookies操作路徑一:http://localhost:8080/content/requestAction!showMainServiceReqDetail.action路徑二:http://localhost/content/requestAction!showMainServiceReqDetail.action路徑三:http://localhost/clp/ requestAction!showMainServiceReqDetail.action路徑一是直接訪問,路徑二與路

C#.NET面試問題和答案:提高您的專業知識 C#.NET面試問題和答案:提高您的專業知識 Apr 07, 2025 am 12:01 AM

C#.NET面試問題和答案包括基礎知識、核心概念和高級用法。 1)基礎知識:C#是微軟開發的面向對象語言,主要用於.NET框架。 2)核心概念:委託和事件允許動態綁定方法,LINQ提供強大查詢功能。 3)高級用法:異步編程提高響應性,表達式樹用於動態代碼構建。

Scrapy如何使用代理IP、user agent、Cookies來避免反爬蟲策略 Scrapy如何使用代理IP、user agent、Cookies來避免反爬蟲策略 Jun 23, 2023 pm 01:22 PM

隨著網路爬蟲的發展,越來越多的網站和伺服器為了防止被惡意爬取數據,開始採用反爬蟲策略進行防護。這些策略包括IP封禁、useragent檢測、Cookies驗證等等。若沒有相應的應對策略,我們的爬蟲程式就很容易被標記為惡意爬蟲並被封鎖。因此,為了避免這種情況出現,我們需要在Scrapy框架的爬蟲程式中應用代理IP、useragent以及Cookies等策略

C#.NET:探索核心概念和編程基礎知識 C#.NET:探索核心概念和編程基礎知識 Apr 10, 2025 am 09:32 AM

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

See all articles