Проблема с управлением сеансом

#cookies #php

#файлы cookie #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;
}
  

Но это не работает. Может ли кто-нибудь помочь мне, как восстановить мои сеансы. Спасибо 🙂

Комментарии:

1. Я не вижу той части, где вы проверяете правильность аутентификации в своем коде, возможно ли, что пользователи автоматически входят в систему?

2. Кстати: что такое session_encrypt? это функция, определенная вами, в php есть только функция sessino_encode.

3. session_encrypt — это моя функция. Где я должен проверить правильность аутентификации?

4. когда вы устанавливаете $user->status переменную?

5. Я думаю, что код server.com/app2 должен иметь флаг, установленный для проверки в соответствии с активным пользователем, и код на этой странице будет выполняться, только если установлен флаг, иначе будет отображаться ошибка о недостаточных правах

Ответ №1:

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

У вас есть несколько возможных решений:

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

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

Ответ №2:

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