不同系统的相同会话变量

时间:2009-11-24 13:38:59

标签: php

我遇到了一个很大的问题,我被指派维护这个系统。

实际上,内部网上有许多系统。

问题是,原始程序员为Intranet创建了许多系统,所有这些系统都通过脚本连接到数据库,其中用户名,pass,db params等存储在$ _SESSION变量中。

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

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

谢谢!

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

然后当每个up向会话发送更新时,这些值将被添加到各自的“app containers”

答案 2 :(得分:0)

将每个应用程序移动到自己的子域,并确保不共享会话cookie - 这样用户将为每个应用程序分别设置一个会话。

答案 3 :(得分:0)

这可能会对您有所帮助:

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

那里有一个例子:

  

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

     

它在某种程度上是先进的,它涉及mod-rewrite和php图像   操纵。我这样做的方式是使用图像。例如   http://something.com/something/spacer.jpg   获得mod-rewrite到脚本   ?set_cookies.php perv_id = 1234&放大器;滚动=左和放大器; right_scroll =右和放大器; mascot_header =无   然后当你把它扔进去的时候   将在abc.domain.com上设置cookie   xyz.domain.com。

     

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