2011-12-12 119 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