[英]PHP not storing data in sessions for some users
内部服务器为LAN上的用户提供两种不同的应用程序:
https://10.0.0.100/app1/
https://10.0.0.100/app2/
这两个应用程序都由相同的Apache配置文件提供服务,它们只位于public_html
下的单独目录中。 两个应用程序都使用PHP会话,但它们都在$_SESSION
变量$_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 "<a href='page2.php'>Clicky</a>";
?>
然后,在page2.php
:
<?php
/**
* App2
* /page2.php
*/
session_start();
echo "Have you been here: {$_SESSION['apps_been_here']}";
如果用户也登录到app1,则不会向用户显示“是”! 然而,谁不使用APP1用户就看“是” page2.php
。 调查一下,我在/var/lib/php/session/
打开了会话文件。 我只看到该文件中的变量以前缀app1_
开头,而没有以app2_
开头的app2_
用于登录app1的用户 。 未登录到app1的其他用户确实拥有在会话文件中以app2_
开头的变量!
我已经检查过lsof
文件没有锁定,我已经确认浏览器中没有打开浏览器窗口的app1
页面。 为什么App2会话变量不能存储到会话文件中? 有足够的可用内存和硬盘空间,CPU负载低于0.1(按uptime
衡量)。 多个浏览器(Firefox,Chrome)中的多个用户都会遇到这个问题。 清除浏览器cookie和缓存没有帮助。
我相信你所做的事情应该有效,但有一种更好的方法可以解决你的问题。 不要使用'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。* config选项。
试试这个
session_start();
$_SESSION['apps_been_here'] = 'Yes!';
echo "<a href='page2.php'>Clicky</a>";
session_write_close();
我曾经遇到过这样的问题。 那为我修好了!
不好,他们必须在你需要的同一个子树
session.php将只包含session_start();
每个app1和app2都会包含session.php(require_once(“../ session.php”);)这是我知道让它们工作的唯一方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.