2010-09-15 68 views
1

我說直到你註銷,會話超時或關閉瀏覽器。但我對嗎?會話cookie的生命週期是多少?

今天我面試,面試官想知道如果我登錄到一個網頁,並關閉瀏覽器(未註銷的情況),會發生什麼變化會議。

我說,本屆會議將被孤立。他說不 - 因爲他們的用戶只需打開瀏覽器即可連接回會話(僅使用cookie)。我告訴他這是一個持久的cookie--不是會話cookie。 我說如果這是原因,沒有什麼能夠阻止用戶將[persistent] cookie導出到另一臺計算機並在該計算機上啓動會話。

起初他說你不能出口餅乾,但是當我解釋如何的時候,他說他會看起來不錯,但是由於包括2位建築師在內的很多人提出了這個設計,所以他們不可能都是錯的。

+0

當會話標識符存儲在cookie中時,它們在瀏覽器會話之間保持不變。 Cookie將隨初始請求一起發送並恢復會話,除非您提到的其他條件得到滿足。 – pharalia

回答

-3

不知道這是否是一樣的ASP,但我知道,在PHP這是20 minutes

1

沒有「會話」的Web應用程序的明確定義。一個網站可能會決定使用持久性cookie或會話cookie來查找後續請求中的會話上下文(或者除Cookie之外的其他內容)。如果會話查詢是通過會話cookie完成的,那麼您對會話孤立的說法(在服務器上,客戶端無法訪問)是正確的。

然而,「當你關閉瀏覽器」是不明確的。例如,如果您打開了兩個Internet Explorer實例,則兩個窗口都可能保持會話Cookie存活。因此,關閉顯示網站頁面的「瀏覽器」並不一定會清除cookie。

4

你是對的。會話cookie在瀏覽器關閉時被刪除,並且當其到期時間到期時刪除永久cookie。如果會話在瀏覽器關閉後保持活動狀態,則他們的網站必須使用持久性cookie。所有的cookies都可以導出到另一臺電腦。這是一個衆所周知的安全漏洞,可通過使用SSL進行緩解。

1

會話cookie是一個沒有到期時間的cookie。

會話cookie的處理由瀏覽器和瀏覽器版本而異,但是當瀏覽器的最後一個實例被關閉(壽命=瀏覽器的運行時)通常是沒有過期日期的cookie將被刪除。

重要的是,對應於該cookie值的服務器端會話具有在服務器上定義的完全獨立的壽命。 HTTP是一種無連接協議,所以當你的瀏覽器不在事務中時,服務器端不知道你是否還在。這意味着服務器必須保持服務器端會話處於活動狀態,直到它被打開時間過長爲止,此時它將通常通過超時(因此生存期=服務器端超時)來刪除服務器端會話。

您可以在另一個瀏覽器中設置相同的cookie,併發送第一個瀏覽器發送的相同數據(通常是cookie),並且只要服務器超時未達到,服務器就會讓您訪問服務器端會話的方式相同。當人們對你的cookies做這件事時,它被稱爲會話劫持。

這裏的JavaScript代碼設置一個「會話」 cookie,它僅僅是一個cookie在沒有「過期」的價值還沒有確定。

document.cookie="COOKIENAME=cookievalue"; 

這裏的JavaScript,設置一個特定的到期時間的cookie,這意味着瀏覽器被指示,停止與該時間之後傳出的請求在發送:發送到服務器

document.cookie="COOKIENAME=cookievalue; expires=Fri, 31 Dec 9999 00:00:01 GMT"; 

的cookie數據不包括過期時間等元數據;服務器只能看到鍵=值對。 到期數據僅供瀏覽器閱讀。 設置與上述任何一種方法,一個cookie會導致瀏覽器該cookie這種方式發送給服務器:

Cookie: COOKIENAME=cookievalue 

服務器最初設置cookie有或沒有截止日期,但不知道是否這已經改變了,它並不真正關心。設置爲下個月到期的Cookie與運行在下個月的瀏覽器上的計算機上的會話Cookie之間沒有功能差異。