我正在創建一個HttpCookie,只設置名稱和值而不是expires屬性,然後將其添加到響應中。夠簡單。按預期創建Cookie(但未保留)。問題是當會話由於某種原因而改變時(比如網站被重建,或者我在調試時重建了我的應用程序),那麼Cookie仍然存在。我希望cookie只對其創建的原始會話有效。會話更改或無效時不會刪除HttpCookie
根據MSDN的說法:「如果您沒有爲cookie指定過期限制,則cookie不會持久保存到客戶端計算機,並在用戶會話過期時過期。」
我想我不確切知道「會話過期」包含的內容。我認爲會話過期20分鐘後cookie會被刪除。但是,如果由於許多原因,創建的會話不再存在,Cookie是否會被刪除?我看到cookie被刪除的唯一時間是當用戶關閉所有瀏覽器窗口並打開一個新窗口時。
如果這都是真的,我可能必須將原始會話ID(「ASP.NET_SessionId」)存儲在cookie中,然後根據當前會話ID檢查它是否不同,然後刪除cookie或創建一個新的。
下面的代碼(我的餅乾和一個在MSDN例子之間唯一的區別就是我存儲多個值在Cookie):
private void SaveValuesToCookie(string[] names, string[] values)
{
HttpCookie cookie = new HttpCookie("MyCookie");
for (int i = 0; i < names.Length; i++)
{
string name = names[i];
cookie.Values[name] = values[i];
}
Response.Cookies.Add(cookie);
}
private string GetValueFromCookie(string name)
{
HttpCookie cookie = Request.Cookies["MyCookie"];
if (cookie == null)
return null;
return cookie.Values[name];
}
我不想將它存儲在會話中的原因(我原本是這樣做的)是我需要一個安全的cookie,只有在使用https時纔會通過。我不想保護整個會話,因爲這意味着整個網站必須使用https。所以在我的示例代碼中,我在SaveValuesToCookie()中省略了這部分:cookie.Secure = true; – 2010-07-20 20:01:32
如果你在會話中存儲的東西,它們不會傳遞給客戶端,所以它們儘可能安全。他們只活在服務器上的內存中。客戶端只會將會話ID視爲一個cookie,並將其發送回服務器,並且.NET框架將根據該數據檢索會話數據。如果會話被終止,數據就會丟失,這通常是一種風險,但如果您想在會話/應用程序重新啓動時使數據失效,則不會。 – pdr 2010-07-20 23:32:35