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

PHP不在某些用户的会话中存储数据,php,linux,session,Php,Linux,Session,内部服务器为局域网上的用户提供两种不同的应用程序: https://10.0.0.100/app1/ https://10.0.0.100/app2/ 这两个应用程序都由相同的Apache配置文件提供服务,它们位于public\u html下的不同目录中。两个应用程序都使用PHP会话,但它们都在$\u会话变量前面加上名称空间: $_SESSION['app1_favorite_colour'] = 'Yellow'; $_SESSION['app2_quest'] = 'Agghhh!';

内部服务器为局域网上的用户提供两种不同的应用程序:

https://10.0.0.100/app1/
https://10.0.0.100/app2/
这两个应用程序都由相同的Apache配置文件提供服务,它们位于
public\u html
下的不同目录中。两个应用程序都使用PHP会话,但它们都在
$\u会话
变量前面加上名称空间:

$_SESSION['app1_favorite_colour'] = 'Yellow';
$_SESSION['app2_quest'] = 'Agghhh!';
尽管如此,登录到
app1
的用户没有将其
app2
会话数据写入磁盘上的会话文件
。考虑<代码> PGE1.PHP<代码>:

<?php

/**
 * App2
 * /page1.php
 */

session_start();
$_SESSION['apps_been_here'] = 'Yes!';
echo "<a href='page2.php'>Clicky</a>";

?>
<?php

/**
 * App2
 * /page2.php
 */

session_start();
echo "Have you been here: {$_SESSION['apps_been_here']}";
如果用户也登录到app1,则不会向用户打印“是”!但是,不使用app1的用户可以在
page2.php
上看到“是”。通过调查,我在
/var/lib/php/session/
中打开了会话文件。对于登录到app1的用户,我在该文件中只看到以前缀
app1\u
开头的变量,而没有看到以
app2\u
开头的变量。其他未登录app1的用户在其会话文件中确实有以
app2\uu
开头的变量

我已使用
lsof
检查文件是否未锁定,并确认浏览器中没有运行
app1
页面的打开的浏览器窗口为什么App2会话变量不能存储到会话文件中?有大量可用内存和硬盘空间,CPU负载低于0.1(通过正常运行时间衡量)。问题发生在多个浏览器(Firefox、Chrome)中的多个用户身上。清除浏览器cookies和缓存没有帮助。

试试这个

session_start();
$_SESSION['apps_been_here'] = 'Yes!';
echo "<a href='page2.php'>Clicky</a>";
session_write_close();
session_start();
$\u会话['apps\u been\u here']='Yes!';
回声“;
会话写入关闭();

我曾经有过这样的问题。那帮我修好了

不好,它们必须在同一子树中 你需要有

  • 根/
    • myapp/
      • session.php
      • 附件1/
      • 附件2/
session.php将只包含session_start()

每个app1和app2将包括session.php(require_once(“../session.php”);)
这是我所知道的使它们工作的唯一方法

我相信你所做的应该工作,但有一种更好的方法可以解决你的问题。 只需在会话开始()之前使用()函数,而不是在会话键前面加上“app1”或“app2”,如下所示:

您还可以使用()调整会话cookie路径,使两个应用程序彼此完全不可见,如: 会话集cookie参数(60*60*24*30,'/app1/')


对于进一步的故障排除,您应该检查使用session_*函数的所有地方,并查看php.ini中的配置选项。

您在App1登录中做了什么?
session_name('app1');
session_start();
$_SESSION['been_here'] = 'Yes!';
...