Проблема с управлением сеансом - PullRequest
0 голосов
/ 21 мая 2011

У меня есть 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 ]

2 голосов
/ 21 мая 2011

Если я правильно читаю ваш вопрос, ваша проблема в том, что ваши три приложения независимы, но размещены на одном сервере / используют один и тот же экземпляр php. Это приводит к тому, что они используют один и тот же php-сеанс, и последний заполняется неуместным мусором.

У вас есть несколько потенциальных решений:

Первым и самым простым является префикс ваших сеансов тем или иным способом, то есть используйте $_SESSION['app1']['param'] или $_SESSION['app1_param'] вместо $_SESSION['param'].

Еще один вариант, если вы установили php как cgi, а не как модуль Apache, это настроить php.ini каждого отдельного приложения таким образом, чтобы они больше не разделяли их идентификатор_сессии (то есть настраивали имя файла cookie сеанса). и / или путь), ни сохранения данных сеанса в том же месте (которое находится где-то в / tmp, если я правильно помню).

1 голос
/ 21 мая 2011

Если вы хотите, чтобы ваши сеансы обрабатывались независимо каждым приложением, было бы проще установить уникальный идентификатор сеанса для каждого приложения в файле cookie.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...