2012-02-08 63 views
3

我打算找出一個瀏覽器特定問題(在Firefox和Chrome中)。我花了很多時間來嘗試解決這個問題,我終於想到爲這裏的專家創建一個現場演示來研究這個問題。 (希望不負有心人)無法通過302重定向在FireFox/Chrome中讀取cookie,但在IE中工作

我有兩個域www.nkmekal.comwww.incessantcoding.com

請使用Firefox/Chrome瀏覽器複製問題:

第1步:

瀏覽http://www.nkmekal.com/createcookie.aspx

該頁面只是創建一個cookie。下面是創建的cookie代碼:

// In On_Load of nkmekal.com/createCookie.aspx 
    HttpCookie cookie = new HttpCookie("DisCookie"); 
    cookie.Value = "djdjd77676ydjdndgdidjkdnhf"; 
    cookie.HttpOnly = true; 
    cookie.Expires = DateTime.Now.AddDays(1); 
    Response.Cookies.Add(cookie); 
    lblCookieInfo.Text = string.Format("<b>Cookie Name:</b> {0} <br/><br/> <b>Cookie Value:</b> {1} <br/><br/> <b>Cookie Expires On:</b> {2}", cookie.Name, cookie.Value, cookie.Expires); 

第2步:

現在打開瀏覽器新標籤,轉到http://www.incessantcoding.com/GoTonkmekal.aspx基本上做一個簡單的302重定向到http://www.nkmekal.com/ReadCookie.aspx,下面是代碼,這是否重定向:

// In On_Load of incessantcoding.com/GoTonkmekal.aspx 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Redirect("http://www.nkmekal.com/ReadCookie.aspx"); 
} 

不過,我看到下面的消息:(請參閱ReadCookie.aspx頁的代碼步驟3)

「沒有cookie中:(」

這意味着域www.nkmekal.com無法讀取其先前創建的,當你瀏覽www.nkmekal.com/餅乾createcookie.aspx

步驟3:

而且http://www.nkmekal.com/ReadCookie.aspx頁面只是試圖讀取上述創建的cookie(步驟1),並顯示cookie數據。下面是試圖讀取cookie並將其顯示在頁面

// In On_Load of nkmekal/ReadCookie.aspx 
    HttpCookie cookie = Request.Cookies["DisCookie"]; 
    if (cookie != null) 
    { 
     // Resetting expiry date because the browser never sends expiry date to Server, 
     // as cookies expiration dates are irrelevant to servers. 
     cookie.Expires = DateTime.Now.AddDays(1); 
     lblCookieInfo.Text = string.Format("<b>Yes! I found a cookie</b> <br><br><b>Cookie Name:</b> {0} <br/><br/> <b>Cookie Value:</b> {1} <br/><br/> <b>Cookie Expires On:</b> {2}", cookie.Name, cookie.Value, cookie.Expires); 
    } 
    else 
    { 
     lblCookieInfo.Text = "No Cookie Found :("; 
    } 

上述步驟做工精細只能在IE瀏覽器,但不能在Firefox/Chrome瀏覽器的代碼。

另外,如果你想要採取偷看在這兩個領域的源代碼,你可以在

http://dl.dropbox.com/u/1248159/incessantcoding.zip

http://dl.dropbox.com/u/1248159/nkmekal.zip

下載它們爲什麼我試圖做到這一點:

所以,我試圖做到這一點的原因是,我需要在域執行某些操作www.incessantcoding.com如果在www.nkmekal中創建了一個cookie。com

而使用302重定向的原因是我們無法讀取跨域cookie,因此我試圖從相應的域中讀取cookie(因爲nkmekal.com只能讀取它的cookie)。

任何幫助/建議將會非常有幫助。

更新: 也相當有趣的是,如果步驟1和3位進行(離開了第2步),該cookie值在Firefox和鉻正確讀取。它只有302方式不起作用。

+0

肯定這是真的,你無法讀取跨域餅乾... – Madhu 2012-02-08 06:49:50

+0

是的!我發現一個cookie Cookie名稱:DisCookie Cookie值:djdjd77676ydjdndgdidjkdnhf Cookie的到期日爲:2012年2月8日下午11時03分08秒 – 2012-02-08 06:55:13

+0

它爲我工作。 firefox 9.1,brgds – 2012-02-08 06:55:43

回答

0

我終於想出了一個替代方案,它工作得很好! 這裏就是我所做的:

如果nkmekal.com創建DisCookie ...我issueing 302重定向到incesscantcoding.com具有加密令牌作爲查詢字符串值,然後incessentcoding.com將創建一個基於其域的查詢字符串值,其自身DisCookie,所以如果我想知道,如果一個cookie存在nkmekal.com我只想看看Cookies集合了DisCookieincessantco ding.com ...我測試了這個場景,它似乎在firefox和chrome中都有效...

然後我發現當用戶登錄到他們的某個服務網站時,甚至google也會做類似的事情。 ..

希望這有助於...

1

當保存一個cookie時,網站的域也被保存 - 這是爲了避免跨域數據交換 - 這意味着:一旦你從一個主機保存一個cookie - 它不能從另一個主機讀取任何。

但是,你可以通過URL從原來的主機通過cookie的數據:

protected void Page_Load(object sender, EventArgs e) 
{ 
    HttpCookie cookie = Request.Cookies["DisCookie"]; 
    if (cookie != null) 
    { 
     Response.Redirect("http://www.nkmekal.com/ReadCookie.aspx?data=" + cookie.Value); 
    } 

    else Response.Redirect("http://www.nkmekal.com/ReadCookie.aspx"); 
} 

,然後只用data在ReadCookie.aspx。

+0

感謝您的迴應,我甚至嘗試了您的建議,但如果仔細查看我的實施情況,我只會向nkmekal.com發出302重定向來獲取cookie,因爲nkmekal.com是cookie的主機...所以我不想從另一個地方讀取cookie ...... – NiK 2012-02-08 07:16:08

相關問題