我正在用PHP开发一个网站,我正在尝试使用OpenID登录机制。我想要一个类似于StackOverflow的行为。通过这个,我的意思是每当我打开stackoverflow时,我已经登录了。我在StackOverflow上找到了两个相关的问题:
OpenId + remember me / staying logged in
Sign in with Twitter, and stay signed in (PHP)
我知道我应该登录用户,如果这是他/她的第一次,我应该注册用户并在他/她的系统中设置一个cookie。但是我想知道的是我应该在cookie中存储什么?用户名/密码组合?这似乎是一个安全问题。另一个问题是我应该在哪里检查cookie?我将很感激一个简单的教程/代码示例。谢谢。
答案 0 :(得分:8)
这是使用Cookie的基本Web应用程序会话管理,OpenID起初并没有什么区别。
不,绝对不要在cookie中存储用户名和密码。 Cookie充当“bearer tokens”,意味着拥有cookie的人进入。存储在cookie中的最好的东西是一个不可思议的任意键,您可以使用它来查找应用程序表中的真实信息。因此,用户显示的cookie为“myappsession”,值为“234871nb341adf”与您的域名绑定。然后,您的应用程序将在本地数据存储中查找“234871nb341adf”的值,并查看它是否与有效用户绑定。你最好还要检查用户在那里多久以及诸如此类的东西。如果它是有效会话并且在您的时间和使用限制范围内,则用户将自动登录。
对于来自RP方面的额外偏执,您可以使用OpenID的checkid_immediate模式进行后台调用,以查看用户是否仍然登录到其IdP。如果他们不是,那么您至少知道哪个提供商尝试将其发送给重新验证,并且可以提供更好的用户体验。
如果您希望您的网站真正安全,您应该通过HTTPS完成所有会话,并将您的Cookie标记为“安全”和“HTTPOnly”,这在setcookie
功能手册页上有记录: http://php.net/manual/en/function.setcookie.php