php会话登录系统

时间:2011-03-17 06:20:54

标签: php session single-sign-on

我有一个服务器说'XYZ'和许多不同域的客户端,比如A,B和C.认证是在服务器上完成的。 - 当用户第一次来到任何网站时,我们会要求他为网站创建帐户。他会输入电子邮件和密码。我们将数据发送到服务器并存储thr。现在他在'XYZ'开户,这样他就可以登录A,B和c的任何一个站点。

下一步:例如,他来到网站B,登录,他输入电子邮件和密码。我们将把这些数据带到服务器进行验证,如果密码与电子邮件匹配,我们将状态“是”发回客户端,以便他成功登录并转到内页。

因为发送电子邮件和状态“是”回到克隆是不安全的。我们正在使用套接字编程。这样外面的人就不会知道我们发送和回复的数据。  因为我们使用socket,所以我们无法创建任何会话或cookie,因为我们没有在浏览器中打开服务器站点。

我想要,例如:当用户成功登录到站点B.如果同时在下一个标签中他去了站点C.他不应该要求登录(不应该显示登录页面)。他自动登录(转到内页)。

2 个答案:

答案 0 :(得分:4)

您正在寻找的东西称为single sign-on(缩写为SSO),这是一个难以正确解决的问题。有lots and lots of SSO schemes,其中所有以他们自己特殊的方式非常糟糕地

您的目标方式的一个主要障碍是我们通常如何跟踪网络上的登录信息:Cookie。特别是,一个域只能设置属于它的cookie。这意味着如果您的三个网站位于三个不同的域中,则不能让一个站点为其他站点设置cookie。

解决此问题的一种常见方法是将身份验证服务实际放在另一个域名上。每当您需要检查用户是否已登录时,都会将其指向该身份验证服务。流行的统一登录机制OpenID使用此技术。 OpenID就是StackOverflow使用的。

(如果您使用各种StackExchange站点,您可能已经注意到在加载页面后有时会自动登录到其他站点。我仍然不确定它是如何工作的,还没有调查过。)

根据您所描述的内容,您可以通过集中身份验证获得良好的服务。您甚至可能会发现实现基于OpenID的系统甚至可以很好地适用于您的站点......但是如果您这样做,我建议您隐藏整个URI的复杂性 - 身份识别的事情,正常的最终用户不太可能理解这个概念。

答案 1 :(得分:0)

用户登录XYZ网站后,您可以在浏览器中设置cookie吗?

现在,当用户访问站点A,B或C时,您可以检查是否针对XYZ域设置了cookie,如果是,则可以登录该用户。但请注意,您只能跨子域(XYZ)共享cookie,而不是不同的域。