2012-02-15 43 views
1

是否有可能在一個php應用程序的多個打開窗口中激活相同的會話?在所有打開的窗口中都有相同的sessionid?

我想擁有一些可怕的「記住我」複選框類型系統的便利性,而不會對用戶數據造成同樣的風險。

我碰到的具體用例是這樣的:當用戶收到一個「好友請求」時,一封電子郵件會被髮送給他們,並在鏈接中包含一個隨機哈希和他們的用戶名。假設該人已經在一個窗口登錄了我的服務,並且正在查看他們的郵件,以便在另一個窗口中查看確認電子郵件。他們點擊確認電子郵件中的鏈接,並啓動第三個窗口,向相關確認頁面發起GET請求。我想這樣做,如果用戶已經登錄到另一個窗口的服務,並且哈希和用戶名與存儲在我的數據庫的「請求」表中的用戶相匹配,點擊鏈接即可確認該朋友。但是,如果他們尚未在另一個窗口中登錄,則他們將被強制登錄以確認好友請求。

當前,如果某人在另一個窗口中登錄,則單擊該鏈接將啓動第三個窗口,並且該人員必須再次登錄,而不管他們是否有另一個打開的會話。

如果不使用cookie來保持持久登錄,可以使用此功能嗎?

更新:這個問題表明自己缺乏有關會議是如何工作的認識。默認情況下,用戶的會話通常在同時打開的瀏覽器窗口中保留。這個問題,正如在我接受的答案中提到的那樣,我打開了一個窗口,其中www.example.com是URL,另一個窗口是example.com作爲URL,在這種情況下,第二個窗口中創建了不同的會話而不是繼續在第一個窗口中開始的會話。

+0

僅僅使用https和安全cookies會更簡單嗎? – 2012-02-15 18:14:28

+0

你現在的行爲有點偏離。在所有瀏覽器窗口之間已經有一個會話共享,因爲只有一個cookie擁有您的域和路徑的會話ID。 – 2012-02-15 18:14:43

+0

不是沒有cookie。至少你需要在一個地方共享會話ID。因爲它適用於所有瀏覽器選項卡/窗口,所以cookie聽起來非常合適。替代會話ID查詢信息參數被編碼到URL中,並且比Cookie更安全。 – hakre 2012-02-15 18:15:13

回答

3

如果您使用基於cookie的會話,則會話已在(同一瀏覽器可執行文件的)窗口之間維護。

在這種情況下,會話ID是唯一的客戶端存儲的令牌,瀏覽器通常不會在不同的窗口之間隔離cookie。

您可能有一個問題,他們正在通過兩個不同的域名(www.example.com VS example.com VS www.example.org,等)訪問你的網站,但基本上是沒有問題的,除非你嘗試使用GET-通過會議標識。

您將在技術上「使用cookies」 - 但cookie僅保存會話ID,而不是會話內容。如果這對你來說很尷尬,你可以使用HTML5 LocalData API,或者使用Flash對象,或者Java applet,或者其他任何東西來存儲會話ID ...

我強烈建議不要試圖識別客戶端a後端通過他們的IP地址或瀏覽器特徵。只要讓他們存儲一個令牌,並用它來確定他們是誰。

+0

謝謝!我認爲問題在於我通常沒有使用萬維網訪問網站(因爲輸入起來更容易),但確認電子郵件中的鏈接中有www。有沒有一種方法可以確保用戶始終重定向到www。該網站的版本,即使他們只鍵入example.com?假設您使用Apache,則可以使用http://www.google.com/search?q=htaccess+redirect+to+www&hl=zh_CN – itsmequinn 2012-02-15 18:22:17

+2

。如果沒有,請將htaccess替換爲您選擇的http服務器。 – Mike 2012-02-15 18:33:13

0

典型的登錄系統有會話和cookie。只有當用戶想要被記住以避免再次從該特定瀏覽器輸入hes數據並且沒有別的時候才設置cookie。 會話在您登錄時生效,但在您關閉窗口後會被destroyde,從而再次提示登錄。 將Cookie保存到用戶瀏覽器時,您必須加密其數據。而不是使用refrensnumber(ID)而不是密碼來保存cookie。

相關問題