在我们的网站上,我们希望可以共享多个域的会话。所有这些网站都在同一台服务器上,但其中一些网站具有不同的IP地址。
我找到的可能的解决方案是自己设置会话ID:
<?php
session_id($someUniqueHash);
?>如果我将散列设置为md5('test'),这将会起作用。在te同一台服务器上的另一个域上,我们又有了会话。
问题是ID的生成。我在互联网上看到了一些使用microtime等的解决方案,但当我使用这种方法时,我无法预测其他域/ PHP页面上的会话ID。
有谁有主意吗?或者我们不应该实现这一点吗?是否有其他选项可以在多个域之间共享会话?(不是子域!)
发布于 2012-10-16 08:22:31
我已经通过使用OAuth类型的flow实现了这个系统,但是我们用User替换了Consumer。
因此,每个域在其自己的会话中都有经过身份验证的Access_Token。然后,您将使用该Access_Token从一个应用程序接口获取有关用户的信息。
我还使用session_set_save_handler解决了会话问题,并将会话存储在数据库表中……该表也将具有Access_Token,这使得使用DB查询查找会话变得非常容易。
希望这对你的想法有所帮助。
发布于 2012-06-22 19:41:17
嗯,这是一个很难的问题。
众所周知,当用户返回您的站点时,PHP使用cookies来理解session_ids,并且没有办法跨域cookies:Cross domain cookies (编辑:有,但方法很复杂)。
这可能就是为什么我从来没有见过一个网站实现这一点,即使他们有不同的领域。
您可以通过页面上来自一个域的链接,通过$_GET或$_POST将会话id传递到下一个域。如果用户直接进入您的其他站点,这将不起作用。
我能想到的唯一部分(不可靠的)方法是在数据库中保留用户计算机的记录,并使用该记录来了解它附加到了哪个会话。因此,您存放计算机的IP地址,可能还有其他一些详细信息,然后返回到一个会话中。
个人计算机的IP和其他详细信息会将他们登录到另一个域。
发布于 2012-06-22 19:59:26
也许这不是你的选择,但你可以试试这个。
在您的主站点上,您可以按照正常的方式生成会话id,并且可以在URL中包含带有会话id的图像标记,以保持到另一个域的会话。作为响应,另一个域将设置一个cookie,这样当访问者到达那里时,它将已经知道会话id。
感觉有点自作聪明的解决方案,但它应该工作,如果你没有太多的其他领域:)第三方cookies可以在浏览器中单独禁用,这是需要考虑的问题。
哦,顺便说一句,会话采用(通过查询参数接受id并设置cookie)是微妙的东西,应该受到保护,即在设置cookie之前会话必须已经存在。
https://stackoverflow.com/questions/11155403
复制相似问题