最近,我偶然发现了一个有趣的错误,其中应用程序中不存在的用户的条目会显示在我们本地定制的票务系统中。经过一番研究后,我意识到这个应用程序和在同一服务器上运行的另一个 PHP 应用程序都使用 $_SESSION['user'] 进行身份验证。当有人使用一个系统然后打开另一个系统时,他会“自动”以第一个应用程序的用户身份登录。
在强制捂脸之后,我更改了其中一个系统中的会话变量名称以阻止这种情况。然而,我需要对我的会话处理类进行永久性的、零维护的更改,以避免在未来的项目中出现这种情况。我认为这可以通过使用唯一值(例如脚本路径)将应用程序的变量放在 $_SESSION 中不会被其他应用程序使用的位置来完成。
有没有更好的办法?
编辑:这是在linux上。这两个应用程序都在同一个网站上。
您可以通过确保 cookie 的域和路径受到限制性设置来确保会话 cookie 特定于应用程序,例如,对于http://www.example.com/apppath上的应用程序,您可以执行以下操作:
<?php
$currentParams = session_get_cookie_params();
session_set_cookie_params($currentParams['lifetime'], '/apppath/', 'www.example.com', $currentParams['secure'], $currentParams['httponly']);
session_start();
Run Code Online (Sandbox Code Playgroud)
这将使其他会话设置保持不变。
路径可能是重要的,默认情况下 PHP 会为请求站点的域发出 cookie(我认为),因此您实际上可以将域参数保留为默认值。