這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)無Cookie會話的實(shí)現(xiàn)是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
目前成都創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、鲅魚圈網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
無Cookie會話
在 ASP.NET 中,無需使用 Cookie,就可以有選擇地建立必要的會話-用戶聯(lián)系。非常有趣的是,除了以下配置設(shè)置以外,您無需在 ASP.NET 應(yīng)用程序中更改任何內(nèi)容即可啟用無 Cookie 會話。
< sessionState cookieless="true" />
ASP.NET 會話狀態(tài)的默認(rèn)設(shè)置是在 machine.config 文件中定義的,并且可以在應(yīng)用程序根文件夾中的 web.config 文件中重寫。通過確保上述行出現(xiàn)在根 web.config 文件中,您可以啟用無 Cookie 會話。就是這樣 — 簡單而有效!
< sessionState>節(jié)點(diǎn)還可以用于配置會話狀態(tài)管理的其他方面,包括存儲介質(zhì)和連接字符串。但是,就 Cookie 而言,只需您將 cookieless 屬性設(shè)置為 true(默認(rèn)設(shè)置為 false)。
請注意,會話設(shè)置是應(yīng)用程序范圍的設(shè)置。換句話說,您站點(diǎn)中的頁要么都將使用要么都將不使用 Cookie 來存儲會話 ID。
當(dāng)不使用 Cookie 時(shí),ASP.NET 在哪里存儲會話 ID 呢?在這種情況下,會話 ID 插入到 URL 內(nèi)的特定位置中。下圖顯示一個(gè)使用無 Cookie 會話的真實(shí)站點(diǎn)的快照。
圖 1. 使用無Cookie會話的 MapPoint
假設(shè)您請求了一個(gè)類似于 http://yourserver/folder/default.aspx 的頁。正如您可以從 MapPoint 快照中看到的那樣,資源名稱前面的相鄰斜杠進(jìn)行了擴(kuò)展,以便包含在內(nèi)部填充了會話 ID 的括號,如下所示。
http://yourserver/folder/(session ID here)/default.aspx
會話 ID 嵌入到 URL 中,并且無需在其他任何地方持久保存它。唔,并不完全是這樣。請考慮以下方案。
您訪問了一個(gè)頁,并且被分配了一個(gè)會話 ID。接下來,您清除了同一瀏覽器示例的地址欄,轉(zhuǎn)到另一個(gè)應(yīng)用程序并且開始工作。然后,您重新鍵入了上一個(gè)應(yīng)用程序的 URL,并且(猜猜看)在您進(jìn)入的過程中檢索會話值。
如果您使用無 Cookie 會話,那么當(dāng)您第二次訪問該應(yīng)用程序時(shí),您將被分配一個(gè)不同的會話 ID,并且丟失以前的所有狀態(tài)。這是無 Cookie 會話的一個(gè)典型的副作用。為了了解其原因,讓我們進(jìn)一步探討無 Cookie 會話的實(shí)現(xiàn)。
無Cookie對話的實(shí)現(xiàn)
無Cookie會話的實(shí)現(xiàn)得益于下列兩個(gè)運(yùn)行時(shí)模塊的努力:一個(gè)名為 SessionStateModule 的標(biāo)準(zhǔn)會話 HTTP 模塊,以及一個(gè)名為 aspnet_filter.dll 的可執(zhí)行文件。后者是一小段 Win32 代碼,它充當(dāng) ISAPI 篩選器。HTTP 模塊和 ISAPI 篩選器實(shí)現(xiàn)了相同的思想,不同之處在于 HTTP 模塊由托管代碼組成,并且需要 ASP.NET 和 CLR 觸發(fā)才能工作。像 aspnet_filter.dll 這樣的傳統(tǒng) ISAPI 篩選器是由 Internet 信息服務(wù) (IIS) 調(diào)用的。二者都截獲在請求處理過程中激發(fā)的 IIS 事件。
當(dāng)新瀏覽器會話的第一個(gè)請求進(jìn)入時(shí),會話狀態(tài)模塊讀取 web.config 文件中有關(guān) Cookie 支持的設(shè)置。如果 節(jié)的 cookieless 屬性設(shè)置為 true,則該模塊生成一個(gè)新的會話 ID,通過將該會話 ID 填充到資源名稱前面的相鄰位置來分割 URL,并且使用 HTTP 302 命令將瀏覽器重定向到新的 URL。
當(dāng)每個(gè)請求到達(dá) IIS 入口時(shí)(遠(yuǎn)遠(yuǎn)早于它被移交給 ASP.NET),aspnet_filter.dll 獲得了一個(gè)查看它的機(jī)會。如果該 URL 將會話 ID 嵌入到括號中,則會提取該會話 ID 并將其復(fù)制到一個(gè)名為 AspFilterSessionId 的請求標(biāo)頭中。然后,重寫該 URL 以使其看起來像原來請求的資源,并且將其釋放。這一次,ASP.NET 會話狀態(tài)模塊從請求標(biāo)頭中檢索會話 ID,并且通過會話-狀態(tài)綁定繼續(xù)工作。
只要該 URL 包含可用來獲取會話 ID 的信息,無 Cookie 機(jī)制就可以很好地工作。不過,這會造成一些使用限制。
上述就是小編為大家分享的無Cookie會話的實(shí)現(xiàn)是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。