ASP.Net Cookie

來源:互聯網
上載者:User
Cookies用於儲存特定使用者資訊,它提供了Web程式中一種有用的方式。多年以來,JavaScript開發人員已經進行了有關cookie的大量工作。同樣,ASP.NET通過System.Web空間名稱也提供了cookie的訪問。雖然你不應該使用cookie來儲存一些敏感性的資料,但是,它們是處理鎖細資料的一個極好的選擇,比如顏色參數選擇或者最後一次訪問日期。

傳遞cookies
cookie是儲存在用戶端電腦的一個小檔案。如果你是一個Windows使用者,可以在使用者路徑中查看Cookies路徑,即為Documents And Settings路徑。這一路徑包含這一檔案名稱的文字檔:

username @ Web site domain that created the cookie

(使用者名稱稱@建立cookie的網站網域名稱)

.NET System.Web空間名稱包含三個類,你可以使用它們來處理用戶端的Cookies:

HttpCookie:提供一個建立和操作獨立HTTP cookies的安全類型的方式。

HttpResponse:Cookies屬性允許用戶端cookies被操作。

HttpRequest:Cookies屬性允許訪問用戶端操作的cookies。

HttpResponse和HttpRequest對象的Cookies屬性將返回一個HttpCookieCollection對象,它包含著,將單獨的cookies添加到集合(collection)中,以及從集合(collection)獲得一個單獨的cookies。

HttpCookie類
HttpCookie類針對於客戶儲存之用而建立的單獨cookies。一旦HttpCookie對象被建立,你可以將其添加到HttpResponse對象的Cookies屬性中。同樣的,你可以通過HttpRequest對象訪問現有的cookies。HttpCookie類包含以下的公有屬性:

Domain(網域名稱):獲得或設定與cookie有關的網域名稱,可用於限制特定地區的cookie訪問。

Expires(期限):獲得或設定cookie的終止日期和時間,你可以將其設定為一個過去的日期以自動終止或者刪除cookie。

Names(名稱):獲得或設定cookie名稱。

Path(路徑):獲得或設定cookie的虛擬路徑。這一屬性允許你限制cookie範圍,也就是說,訪問cookie只能限制於一個特定的檔案夾或者路徑。設定這一屬性限制為只能訪問特定路徑和該路徑下的所有檔案。

Secure(安全):發訊號以表示是否使用Secure Sockets Layer (SSL)來發送cookie值。

Value(值):獲得或設定一個單獨的cookie值。

Values(資訊):返回包含在cookie中的key/value的一個集合。

雖然這些還不是一個最詳盡的列表,但它提供了處理cookies所需要的東西。對於這些屬性的使用,以下VB.NET範例給予最好的理解:

Dim testCookie As New HttpCookie("LastVisited")

testCookie.Value = DateTime.Now.ToString

testCookie.Expires = DateTime.Now.AddDays(7)

testCookie.Domain = "builder.com"

Response.Cookies.Add(testCookie)

這一程式碼片段建立了一個名為LastVisited的新的cookie,並賦予當前日期和時間的值。同樣的,cookie終止期限設定為一個星期,相關的範圍為populated。一旦建立對象,通過Response.Cookies對象的Add方法就可以將對象添加到用戶端的cookies集合。HttpCookie建構函式中的方法有兩種:

HttpCookie objectName = New HttpCookie("cookieName")

HttpCookie objectName = New HttpCookie("cookieName", "cookieValue")

同樣,Response對象包含一個SetCookie方法,這一方法可以接受一個HttpCookie對象。

我的cookie在哪裡?
一旦cookies被儲存在用戶端,有多種不同的方法以提供你訪問它們。如果你知道cookie名稱,可以使用HttpResponse對象很容易地訪問它的值。以下VB.NET行顯示了與cookie有關的值:

 
 

Response.Write(Request.Cookies("LastVisitied").Value)

 

除此之外,可以通過一個HttpCookieCollection對象訪問cookies的完整列表。這就使得cookie列表可以用一個for迴圈來訪問。以下C#代碼說明了這樣的例子:

HttpCookieCollection cookies;

HttpCookie oneCookie;

cookies = Request.Cookies;

string[] cookieArray = cookies.AllKeys;

for (int i=0; I < cookieArray.Length; i++) {

oneCookie = cookies[cookieArray[i]];

Response.Write(oneCookie.Name + " - " + oneCookie.Value);

}

 

VB.NET中相應的代碼如下:

 

Dim i As Integer

Dim oneCookie As HttpCookie

For i = 0 To Request.Cookies.Count - 1

oneCookie = Request.Cookies(i)

Response.Write(oneCookie.Name + " - " + oneCookie.Value)

Next I

穩定也是一個觀點
cookie檔案存放在用戶端機器,所以你的使用者可以任意刪除或更改。此外,使用者還可以使cookies無效化。基於此原因,請記住不要依賴cookie資料。你應該將重要的資訊儲存在伺服器──特別是一個資料庫中。

在一個cookie中儲存關鍵資訊被認為是一種低級的程式設計,因為這些資訊很容易被泄露,原因是這些資訊位於客戶機器的一個檔案中。在這一點,一種方法就是使用SSL,這是一種可以避免敏感資訊的更好方法。

 

我可以使用cookies嗎?
使用者可以在自己的瀏覽器上無效化cookie支援。你可以在自己的代碼中訪問這些設定以決定是否支援cookies。Request對象滿足了這一想法,以下VB.NET代碼顯示了這一過程:

 

If Request.Browser.Cookies = True Then

' 使用cookies

Else

'沒有cookie支援

End If

 

可以聯合代碼來使用cookie值。以下C#程式碼片段對cookie支援進行了測試,並相應地將結果顯示在一個文字框:

if (Request.Browser.Cookies == true)

{

if (Request.Cookies["LastVisited1"] == null)

{

HttpCookie newCookie = new HttpCookie("LastVisited1",DateTime.Now.ToString());

newCookie.Expires = DateTime.Now.AddYears(1);

Response.Cookies.Add(newCookie);

this.txtName.Text = "Is this your first time?";

} else {

this.txtName.Text = "We haven't seen you since " +

 Request.Cookies["LastVisited1"].Value;

}  }

 

你可以將這一程式碼片段添加到ASP.NET頁中的Page_Load事件。

儲存資料的另一方式
ASP.NET提供了儲存特定使用者資料的多種方法。其中一個老方法就是cookies。對于敏感資料,雖然cookies不是最好的方法,但它是諸如顏色參數選擇、最後一次訪問日期等親和力選項(benign items)的最佳選擇。雖然這些敏感性資料重要,但當使用者的電腦崩潰時資料丟失,這也不是世界的末日。

 ===============

Cookie同Session的關係

  1. asp.net中Session可以採用cookie 和cookieless兩種方法,cookieless方式是將SessionID放在URL中在用戶端和服務端中來回傳遞,不需要用到cookie,在這裡不討論這個方式。

  2. 在asp.net中客戶第一次請求一個URL,伺服器給這個客戶產生一個SessionID,並以非永久性的 Cookie發送到用戶端。

  3. 非永久性的 Cookie只有在瀏覽器關閉後這些Cookie才隨之消失,Session的逾時判斷是這樣的過程:

  3.1 第一次Client Access Server,會得到一個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。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.