2009-06-19 111 views
4

在我的傳統ASP應用程序中,當客戶端關閉瀏覽器時ASP會話ID相關的cookie會丟失,甚至認爲會話沒有超時。所以...經典ASP會話ID Cookie生存期

如何使ASP會話ID cookie保持不變,即使客戶端關閉瀏覽器?

回答

5

當你開始一個新的瀏覽器會話並瀏覽到您的網站,傳統的ASP將檢測到沒有ASP會話cookie,並會爲你創建一個新的會話(因爲你已經經歷)。

會話cookie就是這樣,它們存在於會話的整個生命週期中。當您關閉瀏覽器時,會話cookie將被刪除(即使Session.Timeout到期時服務器上的會話狀態將作爲孤立會話存在 - 除非您在Session.Timeout期間內再次提供相同的會話cookie)。

在新瀏覽器會話/實例之間延長ASP會話cookie的生命週期的唯一方法是使用瀏覽器/客戶端上的腳本來更改Cookie生存期。您需要實現您自己的狀態管理機制(例如將狀態持久保存到數據庫),並使用長壽命的常規cookie(或在您的服務器端腳本的每個請求中將滑動過期延長一小段時間),以便將狀態與用戶匹配。

編輯:

下面的文章有一個腳本來修改會話cookie(向下滾動到Cookie到期):

但因爲Shoban正確地指出存在Session Fixation (OWASP)的風險。但是,您可以在一定程度上保護自己免受這樣的:

我也想補充一些注意事項,如果您的應用程序存儲敏感數據(信用卡,金融,醫療等),然後我建議不要這樣做,因爲你的用戶必須重新登錄並開始新的會話。比對不起更安全。

0

這不是由設計?

也許你想用一個普通的cookie來代替?

+0

我想不是......我沒有改變任何IIS的默認設置,它只是丟失了cookie – 2009-06-19 11:52:06

+0

Bravax是正確的 - 這是設計。會話不會丟失或過期,只能從同一瀏覽器會話中訪問。 – Fenton 2009-06-19 11:56:01

1

您可以增加會話超時。

Session.Timeout[=nMinutes] 

http://www.asp101.com/articles/john/sessionsend/default.asp

<% 
    Response.Cookies("firstname")="Alex" 
    Response.Cookies("firstname").Expires=#May 10,2012# 
    %> 

慣於這項工作?

http://www.w3schools.com/ASP/asp_cookies.asp

+0

我必須爲此添加註釋 - 不要將任何個人信息持久保存到客戶端Cookie。不僅因爲它可能導致安全問題,而且因爲在許多國家(包括整個歐盟)未經用戶許可將個人信息存儲在cookie中是非法的。 – Fenton 2009-06-19 11:54:57

0

由於安全原因,您不能訪問瀏覽器之間的會話(無論是兩個不同的瀏覽器,還是同一個瀏覽器關閉並重新打開),您需要堅持會話Cookie。

通常情況下,您需要存儲詳細信息服務器端,並使用包含簡單ID的客戶端cookie來檢索信息。

1

「Session cookie」是線索:當用戶關閉瀏覽器時,他們正在結束他們的會話。

服務器超時的存在是因爲服務器無法知道用戶結束了會話,所以它的工作原理是,如果他們不回來一段時間,會話必須結束。

如果你想要一個持久性cookie,你必須自己設置;但是沒有辦法阻止用戶結束他們的會話。