2010-05-06 123 views
1

我正在尝试在流程上创建单一登录。我已经实现的方法使用将会话数据存储在数据库中。PHP单点登录(SSO)生成新会话ID

当新用户访问网站(www.example2.com)时,会检查认证表。由于这是他们第一次访问该网站,因此不会有任何匹配。

浏览器被重定向到认证服务器www.example1.com/authenticate.php?session_id=ABC123其中ABC123表示在www.example2.com上创建的会话ID。随后在www.example1.com上生成的会话ID将使用URL中设置的参数存储在会话ID旁边。

然后用户被重定向回www.example2.com并找到会话id的匹配。

这个在FireFox中工作正常,但是当我在Chrome中尝试时,我注意到浏览器被重定向回www.example2.com时生成的会话标识是一个新的会话标识。结果创建了一个无限循环。这种行为在FireFox中也没有表现出来。

什么是导致生成新的会话ID?更重要的是,我能做些什么来阻止它?

提前致谢!

编辑
我有一个逻辑错误导致无限循环。这现在在FireFox中再次正常工作,但Chrome和Internet Explorer仍然出现无限循环。

回答

-1

遵循了代码的逻辑,我做了一些修改。现在一切似乎都在起作用。只是有点困惑,为什么这并不影响FireFox。

谢谢大家的关注。

+0

你是如何解决这个问题的?我遇到了与Chrome和会话ID相同的问题。 – Lancelot 2011-05-05 18:41:11

+0

是的,如果你会分享你的解决方案 – soupdiver 2012-04-24 15:10:44

0

会话的整个想法是它只适用于一个域。否则其他域可能会劫持你的会话。浏览器不应该为其未写入的域提交cookie(包含会话ID)。即www.yourbank.com登录的会话ID不应该能够被www.preatesteallingtheieves.com网站读取,浏览器将阻止这种情况发生。 (不管使用什么会话名称)。

SO: 即使您给它们使用相同的名称,会话ID也不会在域之间共享。

+0

我不会主动改变会话名称。我只是存储由“auth服务器”和“代理”设置的会话ID,并在数据库中创建2的映射。所以auth服务器与全局会话数据(即用户id)相关,代理持有特定于会话的会话数据(例如图像captcha变量)。 – bigstylee 2010-05-07 07:30:28