会话管理问题

时间:2011-05-21 08:33:05

标签: cookies php

我的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;
}

但这不起作用。有人可以帮助我修复我的会话。谢谢:))

2 个答案:

答案 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);
相关问题