asp.net關於Cookie跨域的問題
Cookie是一個偉大的發明,它允許Web開發者保留他們的使用者的登入狀態。但是當你的網站有一個以上的網域時就會出現問題了。在Cookie規範上說,一個cookie只能用於一個域名,不能夠發給其它的域名。因此,如果在瀏覽器中對一個網域設定了一個cookie,這個cookie對於其它的網域將無效。如果你想讓你的用戶從你的網站中的其中一個進行登錄,同時也可以在其它網域上進行登錄,這可真是一個大難題。
跨二級域名
我們知道cookie是可以跨二級域名來訪問,這個很好理解,例如你www.test1.com 在的web應用程式創建了一個cookie,要想在bbs.test1.com這樣的二級域名對應的應用程式中訪問,就必須你在創建cookie的時候設定domain參數domain=test1.com。 以asp.net為例程式碼如下:
HttpCookie cookie = new HttpCookie("name", "www.Admin10000.com"); cookie.Domain = "test1.com"; cookie.Path = "/"; Response.Cookies.Add(cookie);
跨頂級域名
如果我不是二級域名而是完全在不同頂級域名中,例如www.test1.com 所在的web應用程式創建了一個cookie,想要在www.test2.com 或其二級網域的應用程式中訪問,改怎麼辦呢?我們知道靠常規反的方法是訪問不了的,關鍵我們就是看看有沒有方法可以訪問。事實是Cookie可以在一定條件下跨域,而不是隨心所欲的實現跨域。
我們來做個測試,看看兩個網站 www.test1.com 和 www.test2.com 如何實現cookie跨域存取。 按照常規我們需要有2個頂級域名,並且有DNS伺服器才能夠配置域名,否則我們是無法驗證的,但是這裡我們也沒有必要那麼麻煩,我們可以透過修改hosts檔案來模擬。在 c:windowssystem32driversetc 中有 hosts文件,在末尾添加上
127.0.0.1 www.test1.com 127.0.0.1 www.test2.com
兩行,就可以將本機用上面的域名訪問本機回環地址了。我們只需要在IIS上部署一套程序,ip為本機回環位址,用兩個網域分別存取就可以了。
我們新三個頁面,分別是 Default.aspx、SSO.ashx、GetCookie.aspx。
其中Default.aspx是 www.test1.com 的頁面,造訪的網址是 http://www.test1.com/Default.aspx。看看前台代碼,它沒有任何後台代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Admin10000.Web.Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <script type="text/javascript"> var _frm = document.createElement("iframe"); _frm.style.display = "none"; _frm.src = "http://www.test2.com/SSO.ashx"; document.body.appendChild(_frm); </script> </div> </form> </body> </html>
另外一個是SSO.ashx 頁面,我們認為它是www.test2.com 的頁面,前台沒有任何代碼,後台代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.SessionState; namespace Admin10000.Web { /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class SSO : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpCookie cookie = new HttpCookie("name", "www.Admin10000.com"); cookie.Domain = "test2.com"; cookie.Path = "/"; cookie.Expires = DateTime.Now.AddMinutes(10000); context.Response.Cookies.Add(cookie); context.Response.ContentType = "text/plain"; context.Response.AddHeader("P3P", "CP=CAO PSA OUR"); context.Response.Write(""); } public bool IsReusable { get { return false; } } } }
最後是GetCookie.aspx頁面,它同樣是www.test2.com下的頁面,沒有前台代碼,只有後台代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Admin10000.Web { public partial class GetCookie : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Request.Cookies["name"] != null) { Response.Write(Request.Cookies["name"].Value); } } } }
好了,現在我們訪問測試,通過訪問http://www.test1.com/Default.aspx之後,此時會透過iframe載入呼叫SSO.ashx這個頁面,執行後台程式碼建立cookie,然後造訪http://www.test2.com/GetCookie.aspx 我們得到了對應的cookie。說明在www.test1.com下建立的cookie在www.test2.com下是可以存取的。
要注意的地方:
admin10000.com 提示 SSO.ashx 的後台程式碼中有一句:context.Response.AddHeader("P3P", "CP=CAO PSA OUR"); 是用來設定P3P3P3P3P3P3);是因為IE瀏覽器支援的P3P導致iframe跨站點時cookie被阻止,無法建立cookie。 (FireFox目前仍不支援P3P安全特性,FireFox自然也不存在此問題。不需要新增P3P回應頭。)
透過iframe的src屬性將test1.com域下的cookie值作為get參數重定向到test2.在com域下SSO.ashx頁面上,SSO.ashx取得test1.com域中所傳過來的cookie值,並將所獲取到值寫入cookie中,這樣就簡單的實現了cookie跨域的存取。
另外Default.aspx頁面也可改為JS呼叫形式:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Admin10000.Web.Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <script type="text/javascript" src="http://www.test2.com/SSO.ashx"></script> </div> </form> </body> </html>

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

許多Windows用戶最近在嘗試存取GoogleChrome瀏覽器中的網站URL時遇到了一個不尋常的錯誤,稱為Roblox403禁止錯誤。即使在多次重新啟動Chrome應用程式後,他們也無能為力。此錯誤可能有幾個潛在原因,我們在下面概述並列出了其中一些。 Chrome的瀏覽歷史記錄和其他快取以及損壞的資料不穩定的互聯網連接網站網址不正確從第三方來源安裝的擴展在考慮了上述所有方面之後,我們提出了一些修復程序,可以幫助用戶解決此問題。如果您遇到相同的問題,請查看本文中的解決方案。修復1

Cookie通常儲存在瀏覽器的Cookie資料夾中的,瀏覽器中的Cookie檔案通常以二進位或SQLite格式存儲,如果直接開啟Cookie文件,可能會看到一些亂碼或無法讀取的內容,因此最好使用瀏覽器提供的Cookie管理介面來檢視和管理Cookie。

電腦上的Cookie儲存在瀏覽器的特定位置,具體位置取決於使用的瀏覽器和作業系統:1、Google Chrome, 儲存在C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies中等等。

手機上的Cookie儲存在行動裝置的瀏覽器應用程式中:1、在iOS裝置上,Cookie儲存在Safari瀏覽器的Settings -> Safari -> Advanced -> Website Data中;2、在Android裝置上,Cookie儲存在Chrome瀏覽器的Settings -> Site settings -> Cookies中等等。

Cookie運作方式涉及到伺服器發送Cookie、瀏覽器儲存Cookie以及瀏覽器對Cookie的處理和儲存。詳細介紹:1、伺服器發送Cookie,伺服器會傳送一個包含Cookie的HTTP回應標頭給瀏覽器。這個Cookie包含了一些訊息,例如使用者的身份認證、偏好設定或購物車內容等,瀏覽器接收到這個Cookie後,會將它儲存在使用者的電腦上;2、瀏覽器儲存Cookie等等。

Cookie洩漏的危害有導致個人識別資訊被竊、個人線上行為被追蹤、帳戶被竊等。詳細介紹:1、個人識別資訊被盜竊,例如姓名、電子郵件地址、電話號碼等,這些資訊可能被不法分子用於進行身份盜竊、欺詐等違法行為;2、個人在線行為被追踪,通過分析cookie中的數據,不法分子可以了解用戶的瀏覽歷史、購物偏好、興趣愛好等;3、帳戶被盜,繞過登入驗證,直接存取用戶的帳號等等。

清除cookie產生的影響有重置個人化設定和偏好、影響廣告體驗、破壞登入狀態和記住密碼功能。詳細介紹:1、重置個人化設定和偏好,如果清除了cookie,購物車將被重置為空,需要重新添加商品,同樣清除cookie還會導致在社群媒體平台上的登入狀態遺失,需要重新輸入使用者名稱和密碼;2、影響廣告體驗,如果清除了cookie,網站將無法了解我們的興趣和偏好,會顯示無關的廣告等等。

隨著網路的普及,我們使用瀏覽器進行上網已經成為一種生活方式。在日常使用瀏覽器過程中,我們常會遇到需要輸入帳號密碼的情況,如網購、社交、郵件等。這些資訊需要瀏覽器記錄下來,以便下次造訪時不需要再次輸入,這時候Cookie就派上了用場。什麼是Cookie? Cookie是指由伺服器端發送到使用者瀏覽器上並儲存在本地的一種小型資料文件,它包含了一些網站的使用者行為
