【问题标题】:How to avoid unwanted session carry-over between different instances of an application如何避免应用程序的不同实例之间不必要的会话结转
【发布时间】:2012-02-02 02:41:23
【问题描述】:

场景

我在一个 Chrome 选项卡(开发环境)中打开了 Zend Framework 应用程序的本地版本。同时,我还打开了在远程服务器上运行的同一应用程序的舞台或现场版本。我登录了其中一个实例。当我尝试登录另一个实例时,此实例会退出并出现致命错误,直到我删除我首先登录的另一个实例的 cookie。

会话 cookie 上的域设置不相同,但仍会发生结转。

问题

为什么会这样?
如何避免?

【问题讨论】:

    标签: php zend-framework session session-cookies


    【解决方案1】:

    给每个服务器一个不同的会话名称(不是默认的),这样你就有不同的会话。如果您想使用多个彼此相邻的会话,这通常可以工作(并且您不想检查 cookie 设置,例如注意 cookie 仅在其域中工作,并且在 cookie 旁边没有其他任何东西用于传递 ID) .

    在原生 PHP 中是 session_name,我假设 Zend Framework 也有相应的配置设置。

    【讨论】:

    • 我认为这可以解决问题。最简单的方法似乎很简单ini_set('session.name', 'something-project-specific')。如果域参数不同,为什么会话名称起着如此重要的作用?
    • 如果 cookie 在站点之间共享(或者如果使用会话 id 参数),会话名称将是唯一可以产生影响的东西。
    【解决方案2】:

    两者的会话 cookie 的域设置是什么?如果它是顶级的,例如.example.com,那么 cookie 将在两个系统之间共享。您可以将其确定为 local.example.comremote.example.com,以便会话 cookie 是不同的并且不会重叠。

    【讨论】:

    • 域由 Zend_Session 自动设置,在一种情况下是 localhost,在另一种情况下是 subdomain.domain.com。所以看来这不是问题的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多