Сеанс потерян после перенаправления страницы в PHP ⇐ Php
-
Anonymous
Сеанс потерян после перенаправления страницы в PHP
Когда я использую перенаправление заголовков PHP, все переменные сеанса теряются... Некоторые люди говорят, что добавление выхода(); сразу после заголовка(""); решит проблему, но, похоже, это не решение...
Есть ли решение?
Вот как я сохраняю переменную в сеансе:
include 'dbc.php'; $err = массив(); foreach($_GET as $key => $value) { $get[$key] = фильтр($value); // Переменные GET фильтруются. } if ($_POST['doLogin'] == 'Войти') { foreach($_POST as $key => $value) { $data[$key] = фильтр($value); // переменные POST фильтруются } $user_email = $data['usr_email']; $pass = $data['pwd']; if (strpos($user_email,'@') === false) { $user_cond = "user_name='$user_email'"; } еще { $user_cond = "user_email='$user_email'"; } $result = mysql_query("ВЫБЕРИТЕ `id`,`pwd`,`полное_имя`,`approved`,`user_level` ОТ пользователей ГДЕ $user_cond И `запрещен` = '0' ") или умереть (mysql_error()); $num = mysql_num_rows($result); // Найдена строка совпадения с более чем 1 результатом — пользователь аутентифицирован. если ($num > 0) { список ($id, $pwd, $full_name, $approved, $user_level) = mysql_fetch_row($result); если(!$одобрено) { //$msg = urlencode("Аккаунт не активирован. Пожалуйста, проверьте свою электронную почту, чтобы получить код активации"); $err[] = "Учетная запись не активирована. Проверьте свою электронную почту, чтобы получить код активации"; //header("Местоположение: login.php?msg=$msg"); //Выход(); } // Проверка на соль if ($pwd === PwdHash($pass, substr($pwd, 0, 9))) { // Это устанавливает сеанс и регистрирует пользователя сеанс_start(); session_regenerate_id (истина); // Предотвращение атак с фиксацией сеанса. // Это устанавливает переменные в сеансе $_SESSION['user_id'] = $id; $_SESSION['user_name'] = $full_name; $_SESSION['user_level'] = $user_level; $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); // Обновляем метку времени и ключ для cookie $штамп = время(); $ckey = GenKey(); mysql_query("пользователи обновления устанавливают `ctime`='$stamp', `ckey` = '$ckey', где id='$id'") или die(mysql_error()); // Устанавливаем куки if(isset($_POST['помнить'])) { setcookie("user_id", $_SESSION['user_id'], time() + 60*60*24*COOKIE_TIME_OUT, "/"); setcookie("user_key", sha1($ckey), time() + 60*60*24*COOKIE_TIME_OUT, "/"); setcookie("user_name", $_SESSION['user_name'], time() + 60*60*24*COOKIE_TIME_OUT, "/"); } если (пусто ($ ошибка)) { заголовок("Местоположение: myaccount.php"); } } еще { //$msg = urlencode("Неверный логин. Повторите попытку, указав правильный адрес электронной почты и пароль. "); $err[] = "Неверный логин. Повторите попытку, указав правильный адрес электронной почты и пароль."; //header("Местоположение: login.php?msg=$msg"); } } еще { $err[] = "Ошибка - Неверный логин. Такого пользователя не существует"; } } Код перенаправления:
// Подключаем базу данных require_once 'dbc.php'; страница_защита(); $authorID = $_SESSION['user_id']; if (!empty($_POST["answ_content"]) && $authorID != 0) { // Vaqciot html chveulebriv texad $content = htmlentities($_POST["answ_content"], ENT_COMPAT, 'UTF-8'); $dro = date('Г-м-д Ч:и:с'); $qID = $_POST["question_ID"]; $author = $_SESSION["имя_пользователя"]; $sql = "INSERT INTO wp_comments (comment_ID, comment_post_ID, comment_author, comment_author_IP, comment_date, comment_content, user_id) ЦЕННОСТИ (NULL, '$qID', '$author', '123.123.123.123', '$dro', '$content', '$authorID')"; $result = mysql_query($sql); // Pasuxebis raodenobis ertit gazrda $increase = "ОБНОВЛЕНИЕ wp_posts SET comment_count = comment_count+1 WHERE ID = $qID"; mysql_query ($ увеличение); // Гадамисамартеба шекитхвис гвердзе $url = 'Местоположение: http://example.com/site/answ/question.php?ID=' . $qID; заголовок ($ URL); } еще { эхо 'ошибка'; }
Когда я использую перенаправление заголовков PHP, все переменные сеанса теряются... Некоторые люди говорят, что добавление выхода(); сразу после заголовка(""); решит проблему, но, похоже, это не решение...
Есть ли решение?
Вот как я сохраняю переменную в сеансе:
include 'dbc.php'; $err = массив(); foreach($_GET as $key => $value) { $get[$key] = фильтр($value); // Переменные GET фильтруются. } if ($_POST['doLogin'] == 'Войти') { foreach($_POST as $key => $value) { $data[$key] = фильтр($value); // переменные POST фильтруются } $user_email = $data['usr_email']; $pass = $data['pwd']; if (strpos($user_email,'@') === false) { $user_cond = "user_name='$user_email'"; } еще { $user_cond = "user_email='$user_email'"; } $result = mysql_query("ВЫБЕРИТЕ `id`,`pwd`,`полное_имя`,`approved`,`user_level` ОТ пользователей ГДЕ $user_cond И `запрещен` = '0' ") или умереть (mysql_error()); $num = mysql_num_rows($result); // Найдена строка совпадения с более чем 1 результатом — пользователь аутентифицирован. если ($num > 0) { список ($id, $pwd, $full_name, $approved, $user_level) = mysql_fetch_row($result); если(!$одобрено) { //$msg = urlencode("Аккаунт не активирован. Пожалуйста, проверьте свою электронную почту, чтобы получить код активации"); $err[] = "Учетная запись не активирована. Проверьте свою электронную почту, чтобы получить код активации"; //header("Местоположение: login.php?msg=$msg"); //Выход(); } // Проверка на соль if ($pwd === PwdHash($pass, substr($pwd, 0, 9))) { // Это устанавливает сеанс и регистрирует пользователя сеанс_start(); session_regenerate_id (истина); // Предотвращение атак с фиксацией сеанса. // Это устанавливает переменные в сеансе $_SESSION['user_id'] = $id; $_SESSION['user_name'] = $full_name; $_SESSION['user_level'] = $user_level; $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); // Обновляем метку времени и ключ для cookie $штамп = время(); $ckey = GenKey(); mysql_query("пользователи обновления устанавливают `ctime`='$stamp', `ckey` = '$ckey', где id='$id'") или die(mysql_error()); // Устанавливаем куки if(isset($_POST['помнить'])) { setcookie("user_id", $_SESSION['user_id'], time() + 60*60*24*COOKIE_TIME_OUT, "/"); setcookie("user_key", sha1($ckey), time() + 60*60*24*COOKIE_TIME_OUT, "/"); setcookie("user_name", $_SESSION['user_name'], time() + 60*60*24*COOKIE_TIME_OUT, "/"); } если (пусто ($ ошибка)) { заголовок("Местоположение: myaccount.php"); } } еще { //$msg = urlencode("Неверный логин. Повторите попытку, указав правильный адрес электронной почты и пароль. "); $err[] = "Неверный логин. Повторите попытку, указав правильный адрес электронной почты и пароль."; //header("Местоположение: login.php?msg=$msg"); } } еще { $err[] = "Ошибка - Неверный логин. Такого пользователя не существует"; } } Код перенаправления:
// Подключаем базу данных require_once 'dbc.php'; страница_защита(); $authorID = $_SESSION['user_id']; if (!empty($_POST["answ_content"]) && $authorID != 0) { // Vaqciot html chveulebriv texad $content = htmlentities($_POST["answ_content"], ENT_COMPAT, 'UTF-8'); $dro = date('Г-м-д Ч:и:с'); $qID = $_POST["question_ID"]; $author = $_SESSION["имя_пользователя"]; $sql = "INSERT INTO wp_comments (comment_ID, comment_post_ID, comment_author, comment_author_IP, comment_date, comment_content, user_id) ЦЕННОСТИ (NULL, '$qID', '$author', '123.123.123.123', '$dro', '$content', '$authorID')"; $result = mysql_query($sql); // Pasuxebis raodenobis ertit gazrda $increase = "ОБНОВЛЕНИЕ wp_posts SET comment_count = comment_count+1 WHERE ID = $qID"; mysql_query ($ увеличение); // Гадамисамартеба шекитхвис гвердзе $url = 'Местоположение: http://example.com/site/answ/question.php?ID=' . $qID; заголовок ($ URL); } еще { эхо 'ошибка'; }
Мобильная версия