cookie和session的基礎知識:
cookie是保存在客戶端的,保存少量信息,明文,經常用來保存用戶id之類的信息,常見場景就是登錄時候的“記住我”。不推薦保存敏感信息。
session是會話級的,保存在服務端,每個用戶是唯一的,可以用來實現購物車之類的,需要在服務端保存當前用戶會話的上下文信息的需求。可以保存在服務器的內存中,不能跨服務器;可以保存在數據庫中。
上面是一些零星的知識點。其實還有很多,例如cookie中的sessionid,session還可以用狀態服務器保存,這樣可以用專用的服務器保存session。cookie中的內容是字符串類型的,session中的內容是object類型的,session中的內容獲取之後需要類型轉換,轉換成所需要的類型。
在ASP.NET中,可以在web.config文件中進行配置。
<configuration> <system.web> <sessionState mode="InProc" timeout="20" cookieless="true" stateConnectionString="tcpip=localhost:42424" sqlConnectionString="" /> </system.web> </configuration>
關於配置節中的參數信息,可以查看 ASP.NET Session 狀態的存儲 ,講得比較詳細,還有找到了細說Cookie 這樣一篇文章,感覺講得也比較詳細。
問題有兩個。
1 客戶端禁用cookie之後,session還能用嗎?
2 cookie是如何在客戶端和服務端傳遞的,具體的傳遞過程。
回答。
1 客戶端禁用cookie之後,session還能用嗎?
禁用cookie之後,也可以使用session。
Session的狀態存儲在兩個地方,分別是客戶端和服務端。客戶端保存SessionID,Session信息保存在服務端。客戶端的SessionID是保存在Cookie中的,如果浏覽器禁用cookie,那麼就不能使用session的好處了。
其實sessionid還可以通過url傳遞,還可以通過form傳遞,可以自定義來實現的。
在ASP.NET中,session有兩種存儲方式:cookie和cookieless。也就是說禁用cookie也可以使用session。配置為cookieless=true之後,可以選擇將session存儲在狀態服務中,或者存儲在SQL Server中。具體的做法可以看一下最後的參考文獻。
2 cookie是如何在客戶端和服務端傳遞的,具體的傳遞過程。
cookie在客戶端和服務器端的傳遞是通過請求和響應的頭來傳遞的。
從客戶端到服務器端傳遞cookie,是在request的header中有一個cookie,裡面就是傳遞的內容。
從服務器端到客戶端傳遞cookie,是在response的header中有一個set-cookie,裡面就是通過後台代碼設置的cookie的內容。
這可以通過很多的抓包工具來查看,例如fiddler,httpwatch,firebug。
本文出自 “突破中的IT結構師” 博客,請務必保留此出處http://virusswb.blog.51cto.com/115214/998456