如何在php中生成一个唯一的会话ID

在我们的网站上,我们希望能够分享会话accros多个域。 所有这些网站都在同一台服务器上,但其中一些具有不同的IP地址。

我找到的可能解决方案是自己设置会话ID:

<?php
session_id($someUniqueHash);
?>

如果我像md5('test')那样创建散列,这是有效的。 在同一台服务器上的其他域上,我们再次进行会话。

问题是生成ID。 我在互联网上看到了microtime等的一些解决方案,但是当我使用这种方法时,我无法预测其他域/ PHP页面上的会话ID。

有人有想法吗? 或者我们不应该执行这个? 是否有其他选项可以在多个域上共享会话? (不是子域!)


我已经通过使用OAuth类型流实现了这个系统,但我们用用户替换了消费者。

因此,每个域都会在其自己的会话中拥有经过验证的Access_Token。 然后,您将使用该Access_Token从api获取有关用户的信息。

我还使用session_set_save_handler解决了会话问题,并将会话存储在数据库表中...此表还具有Access_Token,这使得使用DB Query查找会话变得非常简单。

希望这有助于创意。


嗯,这是一个困难的。

众所周知,当用户回到您的网站时,PHP使用Cookie来了解session_ids,并且无法跨域cookie:跨域cookie(编辑:有,但方法很复杂)。

这可能就是为什么我从来没有见过一个网站实现这一点,即使他们有不同的域名。

您可以通过一个域的页面上的链接将会话ID通过$ _GET或$ _POST传递给下一个域。 如果用户直接进入您的其他网站,这将不起作用。

我能想出的唯一部分(不可靠)方法是记录数据库中的用户计算器并使用它来了解会话附加到哪个会话。 所以你把电脑的IP地址和其他一些细节放在一个会话中。

个人计算机的IP和其他细节会将它们记录到其他域中。


也许这不适合你,但你可以试试这个。

在您的主站点上,按常规生成会话ID,并将会话永久化到另一个域,您可以在URL中包含具有会话ID的图像标记。 作为响应,另一个域将设置一个cookie,以便当访问者到达时它已经知道会话ID。

感觉有点聪明的裤子解决方案,但它应该工作,如果你没有太多的其他域:)第三方cookie可以在浏览器中单独禁用btw,需要考虑的事情。

哦,顺便说一下,会话通过(接受通过查询参数和设置cookie的ID)是微妙的东西,应该受到保护,即会话必须已经存在,然后再设置cookie。

链接地址: http://www.djcxy.com/p/60751.html

上一篇: How to generate a unique session ID in php

下一篇: Replay items in AVQueuePlayer after last