内部服务器为LAN上的用户提供两种不同的应用程序:
https://10.0.0.100/app1/
https://10.0.0.100/app2/
这两个应用程序都由相同的Apache配置文件提供服务,它们只位于public_html下的单独目录中.两个应用程序都使用PHP会话,但它们都在$_SESSION变量前面加上其命名空间:
$_SESSION['app1_favorite_colour'] = 'Yellow';
$_SESSION['app2_quest'] = 'Agghhh!';
尽管如此,登录到app1的用户没有将他们的app2_会话数据写入磁盘上的会话文件.考虑page1.PHP:
PHP
/**
* App2
* /page1.PHP
*/
session_start();
$_SESSION['apps_been_here'] = 'Yes!';
echo "
然后,在page2.php上:
如果用户也登录到app1,则不会向用户显示“是”!但是,不使用app1的用户确实在page2.php上看到“是”.调查一下,我在/ var / lib / php / session /中打开了会话文件.我只看到该文件中的变量以前缀app1_开头,而没有以app2_开头的变量用于登录app1的用户.未登录到app1的其他用户确实拥有在会话文件中以app2_开头的变量!
我已经检查过lsof文件没有被锁定,我已经确认浏览器中没有打开浏览器窗口的app1页面.为什么App2会话变量不能存储到会话文件中?有足够的可用内存和硬盘空间,CPU负载低于0.1(按正常运行时间衡量).多个浏览器(Firefox,Chrome)中的多个用户都会遇到这个问题.清除浏览器cookie和缓存没有帮助.
最佳答案
我相信你所做的事情应该有效,但有一种更好的方法可以解决你的问题.
而不是使用’app1’或’app2’为会话密钥添加前缀,只需在session_start()之前使用session_name()函数,如:
而不是使用’app1’或’app2’为会话密钥添加前缀,只需在session_start()之前使用session_name()函数,如:
session_name('app1');
session_start();
$_SESSION['been_here'] = 'Yes!';
...
您还可以使用session_set_cookie_params()调整会话cookie路径,以便两个应用程序彼此完全不可见,如:
session_set_cookie_params(60 * 60 * 24 * 30,’/ app1 /’);
为了进一步排除故障,您应该检查使用session_ *函数的所有位置,并查看PHP.ini中的session.*配置选项.