【问题标题】:Same session variable for different systems不同系统的相同会话变量
【发布时间】:2009-11-24 13:38:59
【问题描述】:

我被分配维护的系统存在很大问题。

实际上它是内部网上的许多系统。

问题是,最初的程序员为内网创建了许多系统,它们都通过脚本连接到数据库,其中用户名、密码、数据库参数等都存储在 $_SESSION 变量中。

当用户登录到一个系统,在一个选项卡中,然后为另一个系统打开另一个选项卡,并且由于会话变量被覆盖,他无法继续在第一个系统中操作时,就会出现问题。

考虑到有几十个应用程序...您认为我如何在不更改每个现有应用程序的情况下解决这个问题?

谢谢!

【问题讨论】:

    标签: php


    【解决方案1】:

    您需要找到操纵会话的方法。

    一种方法是使用子域,例如:app1.myoffice.localapp2.myoffice.local 等。浏览器不会跨域共享会话 cookie。

    其他技巧是将会话 cookie 路径从 / 更改为子文件夹。 myoffice.local/app1/ 的会话 cookie 应限制为 /app1/myoffice.local/app2/ 的会话 cookie 应限制为 /app2/ 等等。

    我认为您可以在调用session_start( ) 之前通过session_set_cookie_params( )ini_set( ) 函数在php 中更改此设置。

    【讨论】:

      【解决方案2】:

      最好的办法是尝试设置会话命名空间。所以基本上,你的会话数据看起来像......

      array("app1" => array(),  "app2" => array(), "app3" => array())
      

      然后当每个 up 向会话发送更新时,这些值将被添加到它们各自的“应用容器”中

      【讨论】:

        【解决方案3】:

        将每个应用程序移至其自己的子域并确保会话 cookie 不被共享 - 这样用户将为每个应用程序拥有一个单独的会话。

        【讨论】:

          【解决方案4】:

          这可能会对您有所帮助:

          http://www.decodephp.com/2006/11/16/php-sessions-across-subdomains-the-multiple-servers-issue/

          一个例子:

          我设法为这个问题创建了一个不太侵入性的解决方案。

          它在某种意义上有点先进,它涉及 mod-rewrite 和 php image 操纵。我这样做的方法是使用图像。例如 http://something.com/something/spacer.jpg 将 mod 重写为脚本 set_cookies.php?perv_id=1234&scroll=left&right_scroll=right&mascot_header=no 然后当你把它扔进它时 将在 abc.domain.com 上设置 cookie xyz.domain.com.

          set_cookies.php 设置 cookie 然后拉出 1×1 白色图像并显示 它。所以要设置 9 个 cookie,我最终会在我的页面上留下一个 9 像素的小点。一世 让它在同一台服务器上工作,但它应该在多个服务器上工作 服务器也是,因为变量通过 GET 传递

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-16
            • 2016-10-02
            • 2012-01-30
            • 1970-01-01
            • 2021-03-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多