#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);