繁体   English   中英

PHP不会在某些用户的会话中存储数据

[英]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();

我曾经遇到过这样的问题。 那为我修好了!

不好,他们必须在你需要的同一个子树

  • 根/
    • MYAPP /
      • session.php文件
      • APP1 /
      • APP 2 /

session.php将只包含session_start();

每个app1和app2都会包含session.php(require_once(“../ session.php”);)这是我知道让它们工作的唯一方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM