【问题标题】:PHP session persistence Different PHP applications, Same host serverPHP会话持久性不同的PHP应用程序,相同的主机服务器
【发布时间】:2020-06-04 01:16:32
【问题描述】:

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

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

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

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

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

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

干杯,

大菱鲆

示例代码:

<?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/test2 中的完全相同。我不希望 test2 能够简单地通过在它自己的安装点之外声明一个目录来使用 test1 会话状态——我希望 PHP 能够防止这种情况。它没有 - 我得到相同的会话。

【问题讨论】:

  • 请分享其他代码,以便我们帮助解决问题。
  • 如果应用程序假设它拥有自己的域,那么是的,它们可以共享相同的会话 cookie。设置路径应该可以解决问题。你清除 cookie 了吗?
  • gre_gor:是的,路径已设置,cookie 已清除。任何一个应用程序都可以设置其他应用程序路径并获取会话,这真的很奇怪!

标签: php session lamp


【解决方案1】:

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

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

【讨论】:

  • 这些不是我的应用程序 - 场景是受信任的 Web 服务器托管两个不一定相互信任的应用程序。每个人都需要自己的会话空间,对方无法干预。每个应用程序拥有一个 vhost + DNS 名称可以解决这个问题,但这是一个问题。会话路径不起作用,因为事实证明任何一个应用程序都可以将路径设置为其他应用程序路径并获取会话信息。我知道,这很令人惊讶”
猜你喜欢
  • 2017-09-26
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多