首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中生成唯一的会话ID

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

Stack Overflow用户
提问于 2012-06-22 19:33:57
回答 4查看 14.4K关注 0票数 7

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

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

代码语言:javascript
复制
<?php
session_id($someUniqueHash);
?>

如果我将散列设置为md5('test'),这将会起作用。在te同一台服务器上的另一个域上,我们又有了会话。

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

有谁有主意吗?或者我们不应该实现这一点吗?是否有其他选项可以在多个域之间共享会话?(不是子域!)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-16 08:22:31

我已经通过使用OAuth类型的flow实现了这个系统,但是我们用User替换了Consumer。

因此,每个域在其自己的会话中都有经过身份验证的Access_Token。然后,您将使用该Access_Token从一个应用程序接口获取有关用户的信息。

我还使用session_set_save_handler解决了会话问题,并将会话存储在数据库表中……该表也将具有Access_Token,这使得使用DB查询查找会话变得非常容易。

希望这对你的想法有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2012-06-22 19:41:17

嗯,这是一个很难的问题。

众所周知,当用户返回您的站点时,PHP使用cookies来理解session_ids,并且没有办法跨域cookies:Cross domain cookies (编辑:有,但方法很复杂)。

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

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

我能想到的唯一部分(不可靠的)方法是在数据库中保留用户计算机的记录,并使用该记录来了解它附加到了哪个会话。因此,您存放计算机的IP地址,可能还有其他一些详细信息,然后返回到一个会话中。

个人计算机的IP和其他详细信息会将他们登录到另一个域。

票数 0
EN

Stack Overflow用户

发布于 2012-06-22 19:59:26

也许这不是你的选择,但你可以试试这个。

在您的主站点上,您可以按照正常的方式生成会话id,并且可以在URL中包含带有会话id的图像标记,以保持到另一个域的会话。作为响应,另一个域将设置一个cookie,这样当访问者到达那里时,它将已经知道会话id。

感觉有点自作聪明的解决方案,但它应该工作,如果你没有太多的其他领域:)第三方cookies可以在浏览器中单独禁用,这是需要考虑的问题。

哦,顺便说一句,会话采用(通过查询参数接受id并设置cookie)是微妙的东西,应该受到保护,即在设置cookie之前会话必须已经存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11155403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档