Php OpenID登录机制-保持登录状态

Php OpenID登录机制-保持登录状态,php,cookies,openid,Php,Cookies,Openid,我正在用PHP开发一个网站,并尝试使用OpenID作为登录机制。我想要一个类似StackOverflow的行为。我的意思是,每当我打开stackoverflow,我就已经登录了。我在StackOverflow上发现了两个相关问题: 我知道我应该登录用户,如果这是他/她的第一次,我应该注册用户并在他/她的系统中设置cookie。然而,我想知道的是我应该在cookie中存储什么?用户名/密码组合?这似乎是一个安全问题。另一个问题是我应该在哪里检查饼干?我希望有一个简单的教程/代码示例。谢谢。这是

我正在用PHP开发一个网站,并尝试使用OpenID作为登录机制。我想要一个类似StackOverflow的行为。我的意思是,每当我打开stackoverflow,我就已经登录了。我在StackOverflow上发现了两个相关问题:


我知道我应该登录用户,如果这是他/她的第一次,我应该注册用户并在他/她的系统中设置cookie。然而,我想知道的是我应该在cookie中存储什么?用户名/密码组合?这似乎是一个安全问题。另一个问题是我应该在哪里检查饼干?我希望有一个简单的教程/代码示例。谢谢。

这是带有cookies的基本web应用程序会话管理,OpenID一开始并没有什么不同

不,绝对不要在cookie中存储用户名和密码。cookie充当“不记名代币”,意思是拥有cookie的人都可以进入。存储在cookie中的最好的东西是一个不可用的任意键,您可以使用它在应用程序的表中查找真实信息。因此,用户会显示一个cookie“myappsession”和一个绑定到您的域的值“234871nb341adf”。然后,您的应用程序将在本地数据存储中查找“234871nb341adf”的值,并查看它是否绑定到有效用户。你最好也检查一下那个用户在那里多久了等等。如果它是有效会话,并且在您的时间和使用限制内,则用户将自动登录

对于RP端的额外偏执,您可以使用OpenID的checkid_immediate模式进行后台调用,查看用户是否仍登录到其IdP。如果它们不是,那么您至少知道尝试将它们发送到哪个提供商进行重新验证,并且可以提供更好的用户体验


如果您希望您的站点真正安全,您应该通过HTTPS进行所有会话,并将您的cookie标记为“安全”和“HTTPOnly”,这在
setcookie
功能手册页面中有记录:

非常感谢。因为我很久以前问过这个问题,所以我提出了一个类似的解决方案。我很高兴我走了那条路;)@jricher checkid\u immediate是否需要返回url?有没有一种方法可以“同步”完成它,而不是等待提供者回调?OpenID通过浏览器重定向工作,而不是直接HTTP调用,因此您需要等待返回。