2009-08-03 81 views
4

我試圖找出一個IPB論壇的工作。保持狀態,沒有一個cookie

如果我打勾記得我的話,我會留在,即使我關閉瀏覽器,然後重新打開記錄。

我想鍛鍊這怎麼可能,因爲這是由服務器設置的唯一的Cookie在會話,即年底到期時,我關閉瀏覽器。那麼服務器如何在沒有使用cookie的情況下恢復會話呢?

編輯:會話cookie設置在會議結束時到期,而我有我的瀏覽器設置在會議結束時刪除Cookie。

這意味着,當我閉上瀏覽器(會話結束時),餅乾應予以刪除。

在我的瀏覽器被關閉,如果我打開了在不同的瀏覽器相同的網站的時候,肯定是會議應該恢復?但是,這並沒有發生。

相反,如果我打開了我原來的瀏覽器,會話恢復。

唯一的其他設置Cookie是一種叫做pass_hash cookie,它一旦被創建期滿,由每次頁面加載服務器發送。所以它不會被用於認證。

回答

0

這聽起來像你剛剛錯過了一個cookie(或者當它過期時被誤讀/誤解),但另一種可能性可能是它將遠程地址保存在數據庫中,並自動爲它創建一個新的會話第二次訪問。然而,這將是一個比較差的解決方案既安全明智的,並且由於NAT的,等等 - 所以我懷疑這是IPB做什麼。

後您上次
+0

我沒有錯過任何cookie ......我一直在監控他們,因爲他們是創建並檢查他們的過期日期,試圖理解。 – 2009-08-03 02:16:37

1

通常餅乾關閉瀏覽器。如果您使用PHP,請查看 set_cookie's選項,或者如果您正在使用會話,請查看session區域。

// Set Cookie 
setcookie($name, $value, $expire) 
// $expire is the time in seconds since Unix Epoch (see [time()][3]) it will stay alive 
// Session 
session_set_cookie_params($lifetime) 
// $lifetime is the seconds it will stay alive in seconds 
1

會話信息時,瀏覽器窗口關閉不一定破壞。在PHP中,例如,你可以選擇保存會話信息在數據庫中,你可以堅持的是在瀏覽器關閉後原有的會話結束。

我能想到的另一種方法是在Users表上設置一個標誌,指出用戶仍然登錄。也許表中有一個名爲logged_in的字段,您可以將其設置爲true。一定時間後[即,你不回來]它會被重置回爲false。

+0

如果瀏覽器窗口關閉,並且會話cookie被設置爲在會話結束時過期,並且當我關閉瀏覽器(結束會話)時cookie被刪除,這是否意味着如果我打開了網站不同的瀏覽器會話應該恢復?如果沒有,爲什麼不呢? – 2009-08-03 02:18:16

+0

這可能是如何工作的。 他們可以存儲會話以及您的IP地址和您登錄的時間。當您回來時,他們可以檢查您的IP,使用用戶名和上次登錄時的時間進行匹配(注意:如果超過1小時, 要求登錄)。 然而,您必須在用戶註銷時刪除這些字段值。 – mlevit 2009-08-03 02:21:42

+0

爲什麼會話不在其他瀏覽器中恢復? – 2009-08-03 02:48:10

1

有幾個地方可以隱藏cookie以外的會話信息。

在URL(http://example.com/app/234348738790/main

的會話密鑰作爲GET變量(?SESS = 257892345)

的會話密鑰作爲POST變量(輸入類型= '隱藏')

會話密鑰

將其存儲在本地存儲在瀏覽器中

使用JavaScript與上述任何一種將會話信息傳回服務器。

3

Cookie的替代方法是圖像或其他對象中最後修改的時間戳。服務器可以爲您提供一個圖像,將時間戳設置爲標識會話的值。當你加載另一個頁面時,瀏覽器會發送一個if-modified-時間戳並讓你離開。

2

使用瀏覽器localStorage對象。例如:

localStorage.setItem("lastname", "Smith"); 
var name = localStorage.getItem("lastname");