【问题标题】:same session, different domains, set session id相同的会话,不同的域,设置会话 ID
【发布时间】:2012-01-30 00:58:15
【问题描述】:

我有几个域,我想进行会话。 我创建了一个这样的方法:

用户登录在一个中心位置完成,会话保存在数据库中。

假设用户 A 想要访问 abc.com 域。我的应用程序将其重定向到他登录的主身份验证域。 登录后生成一个身份验证令牌,该令牌保存在会话表的一个字段中,并传回 abc.com 应用程序。

我使用 auth_token 从数据库中获取 session_id 并将 abc.com 的 session_id 设置为相同。

问题是它总是创建一个新会话。

这是我的 abc.com 代码

$sessionId = // get from the database using the auth_token.
 /* CLOSE PREVIOUS SESSION */
            session_destroy();

// sets the new id.  
            session_id($sessionId);

            /** start new session * */
            session_start();

我错过了什么? 我正在使用带有 Symfony 框架的 php。不知道它是否与 symfony 会话处理有关。

【问题讨论】:

  • 域是否在同一台服务器上?这是一个链接,其中包含您想要做什么的示例。看起来你做对了,所以我想说你的框架可能正在阻止它。 gonnalearn.com/2008/04/10/…
  • 你使用的是什么版本的 symfony? 1 个 symfony 中的 2 个域 2 个应用程序是安装,还是它们的系统是独立的?
  • 其中一个域运行 Symfony 1.4,另一个运行 Symfony 1.3。是的,这些域在同一台服务器上。
  • @brpaz 能否请您添加完整的源代码来回答?

标签: php session cookies symfony1 cross-domain


【解决方案1】:

好的。我解决了我的问题。 调用 session_destroy() 后,我不得不删除旧的会话 cookie。

如果有人感兴趣,这是我的完整代码:

$sessionId =  // get session id from  the database using the auth_token
session_destroy();

$this->getResponse()->setCookie('mycookie',null,time()-3600);

session_id($sessionId);

/** start new session * */

session_start();

$this->getResponse()->setCookie('mycookie', $sessionId,null,null,'mydomain');

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多