我的PHP应用程序包含三个小应用程序。每个应用程序都有自己的用户,它们对所有系统都是唯一的我的会话管理有问题。当一个用户使用此用户登录server.com/app1
并自动写入server.com/app2
第二个应用程序日志时。但是该用户对此应用程序没有任何权利。在登录页面中我这样做:
$status = $user->status;
if($status != 4) {
$auth_key = session_encrypt($userdata, $passdata);
$SQL = "UPDATE customer SET auth_key = '$auth_key'
WHERE username = '$userdata' ";
$auth_query = mysql_db_query($db, $SQL);
setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app1", "server.com", false, true);
// Assign variables to session
session_regenerate_id(true);
$session_id = $user->id;
$session_username = $userdata;
$_SESSION['cid'] = $session_id;
$_SESSION['username'] = $session_username;
$_SESSION['status'] = $status;
$_SESSION['user_lastactive'] = time();
header("Location: index.php");
exit;
}
但这不起作用。有人可以帮助我修复我的会话。谢谢:))
答案 0 :(得分:2)
如果我正确地阅读了您的问题,您的问题是您的三个应用程序是独立的但是托管在同一台服务器上/使用相同的php实例。这导致他们使用相同的php会话,后者被不恰当的垃圾填满。
您有几种可能的解决方案:
第一个也是最简单的方法是以会议方式为您的会话添加前缀,即使用$_SESSION['app1']['param']
或$_SESSION['app1_param']
而不是$_SESSION['param']
。
另外,如果你把php安装为cgi而不是Apache模块,那就是以这样一种方式配置每个应用程序的php.ini,使它们不再共享session_id(即配置会话cookie名称)和/或路径)也不将会话数据存储在同一位置(如果我没记错的话,它位于/ tmp中的某个位置)。
答案 1 :(得分:1)
如果您希望每个应用独立处理您的会话,那么为cookie中的每个应用设置唯一的sessionid可能会更容易。
setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app1", "server.com", false, true);
setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app2", "server.com", false, true);
setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app3", "server.com", false, true);