2013-07-02 68 views
2

我有一個網站是在asp.net中完成的。另一個更新的網站是在asp.net MVC,LINQ和Razor中完成的。跨站點,相同的域cookie混淆

當我訪問舊網站oldsite/default?userid = 243時,會設置cookie和會話變量。當我訪問新站點oldsite:88時,我打開了cookie查看器,看起來cookies仍然被設置。

我現在正試圖通過寫出cookie的值來在新網站上測試這一點。

我曾嘗試這樣的代碼:

@{ 
if (!(Request.Cookies["UserID"].Value == "")) 
{ 
    <span>Cookie: @Request.Cookies["UserID"].Value</span> 
} 
if (!(Session["UserID"].ToString() == "")) 
{ 
    <span>Session: @Session["UserID"].ToString()</span> 
} 
} 

但頁面錯誤,並在網頁上線(因爲我不能用我的本地主機,因爲域會有所不同,因此Cookie不能轉移。

我怎麼告訴我新的網站,如果這個cookie不存在只是一起移動。否則,如果它存在,然後寫出來它的價值。我並沒有現在那麼幸運。

我需要檢查它是否存在的原因是因爲不是每個人都會成爲你通過舊網站唱新的網站。有些將只是訪問新的網站,因此根本不會或不需要cookies。

回答

2

檢查爲空。由於您正嘗試讀取不存在的Cookie的Value屬性,因此出現錯誤。您可能會看到NullReferenceException

@{ 
if (Request.Cookies["UserID"] != null) 
{ 
    <span>Cookie: @Request.Cookies["UserID"].Value</span> 
} 
} 

順便說一句,設置您的開發環境,分享與另一個環境餅乾,修改hosts文件,並映射您的域的子目錄:

C:\ WINDOWS \ SYSTEM32 \驅動程序\ etc \ hosts

 
127.0.0.1 dev.mydomain.com 

然後在本地IIS中爲該域添加綁定。

現在,當您瀏覽到dev.mydomain.com時,您將加載您的localhost站點,但具有子域的安全限制,這意味着您可以共享cookie。

+0

謝謝這兩個帳戶,我將修改我的主機文件,以便我可以停止搞亂了真人版。 :) –

0

一種選擇是檢查cookie的名稱是訪問值之前存在:而不是使用索引,這將要麼給你「鍵未找到」或缺失值null值是否Cookies.AllKeys包含關鍵你有興趣

MSDN鏈接Request.Cookies(使用AllKeys的樣品)和HttpCookieCollection.AllKeys

if(Request.Cookies.AllKeys 
    .Contains("UserID", StrngComparer.StringComparer.OrdinalIgnoreCase))...