2011-12-12 226 views
4

我正在開發一個PHP網站,我正在嘗試使用OpenID登錄機制。我想要一個類似於StackOverflow的行爲。到那個,我的意思是,每當我打開計算器,我已經登錄,我發現在計算器上兩個相關的問題:OpenID登錄機制 - 保持登錄

OpenId + remember me/staying logged in

Sign in with Twitter, and stay signed in (PHP)

我知道我應該在用戶時,如果籤這是他/她第一次,我應該註冊用戶並在他/她的系統中設置一個cookie。然而我想知道的是我應該在cookie中存儲什麼?用戶名/密碼組合?這似乎是一個安全問題。另一個問題是我應該在哪裏檢查cookie?我將不勝感激一個簡單的教程/代碼示例。謝謝。

回答

8

這是基本的網絡應用程序會話管理與餅乾和OpenID並沒有在第一次有所作爲。

不,絕對不要在cookie中存儲用戶名和密碼。 Cookie充當「持票人代幣」,意味着擁有cookie的人進入。最好的方式是存儲在cookie中的是一個不可猜測的任意鍵,您可以使用它來查找應用程序中的表中的真實信息。因此,用戶出現了一個「myappsession」cookie,其值爲「234871nb341adf」,與您的域綁定。然後,您的應用程序會在本地數據存儲中查找「234871nb341adf」的值,並查看它是否與有效用戶綁定。你最好還要檢查多久以前,該用戶在那裏,什麼都沒有。如果它是有效的會話,並且在您的時間和使用限制內,則用戶將自動登錄。

對於RP端的額外偏執,您可以使用OpenID的checkid_immediate模式進行後臺調用,以查看用戶是否仍然登錄到他們的IdP。如果他們不是,那麼你至少知道哪個提供商嘗試將它們發送給重新驗證,並且可以提供更好的用戶體驗。

如果您希望您的網站是真正的安全,你應該做的所有的會話通過HTTPS和標記您的餅乾既「安全」和「中HTTPOnly」,這是setcookie功能手冊上記載:http://php.net/manual/en/function.setcookie.php

+0

非常感謝。自從很久以前我問過這個問題之後,我想出了一個類似的解決方案。我很高興我走了那條路:) –

+0

@jricher checkid_immediate是否需要return_to url?有沒有辦法「同步」,而不是等待提供者回調? –

+0

OpenID通過瀏覽器重定向工作,而不是直接的HTTP調用,因此您需要等待返回。 – jricher