PHP会话持久性不同的PHP应用程序,相同的主机服务器



我不确定这是否是一个常见的用例,但我是一个普通的人,所以我不敢相信这是不寻常的:

我有一个运行LAMP堆栈的服务器。服务器上有一些PHP应用程序。前几天我发现两个完全不同的应用程序正在共享会话信息。WTF?!我知道他们会这样做,但为什么?他们信任服务器,但为什么服务器会认为这两个应用程序相互信任?

好的:#1修复是针对一个或两个使用session_name((。这太棒了,如果其中一个或两个都这样做,并且都不试图通过设置名称来获取其他会话,那么它确实解决了问题,但有没有解决两个应用程序相互敌对的问题?PHP级别是否有什么东西可以使会话独立,而不管应用程序可能尝试做什么?

基本上没有https://www.server.com/app1/index.php确实应该访问的会话信息https://www.server.com/app2/index.php等等…

我原以为使用session_set_cookie_params((设置路径会解决这个问题,但不,将这个变量设置为有限的路径实际上没有明显的效果,这很有趣-两个应用程序#仍然可以访问会话内容或其他内容-很有趣!

我不敢相信这是一个新问题,但我还没有找到解决办法。。。。

干杯,

涡轮

示例代码:

<?php
session_set_cookie_params(3600,"/webapps/test1");
session_name("mysession");
session_start(); ?>
<html>
<head>
</head>
<body>
<?php echo session_id(); ?>
</body>
</html>

想象一下webapps/test1中的这段代码和webapps/test 2中的完全相同。我不希望test2能够简单地通过在自己的安装点之外声明一个目录来使用test1会话状态——我希望PHP能够防止这种情况。没有——我也有同样的疗程。

在对不同的应用程序进行编码时,需要确保每个应用程序都将其会话信息(服务器端(保存在不同的位置。例如,如果使用文件保存会话,session.save_path配置变量会指定主机端目录。如果将会话信息存储在数据库表中,则应该使用不同的表,或者更可能使用不同的数据库。

因此,即使以某种方式产生了相同的会话标识符,它也会为每个应用程序产生不同的结果,因为每个应用程序都引用了自己不同的主机端源。

最新更新