Ребята, привет всем! Сегодня начал разбираться с сессиями, возник вопрос: есть два файла (приведены ниже), всегда при перенаправлении на index.php срабатывает условие if ( ! isset($user)). Как результат, соответственно, "You are not registered!" Отлаживаю на localhost (Denwer), может какие-то переменные сервера не включены или что-то еще? Подскажите, пожалуйста. Файл "authorization.php": PHP: <?php $user = "guest"; session_start(); session_register("user"); header("Location: index.php"); ?> Файл "index.php": PHP: <?php session_start(); if ( ! isset($user)) { echo "You are not registered!"; exit; } ?> <html> <body> Привет, <?php echo $user; ?>! </body> </html>
Файл "authorization.php": PHP: <?php session_start(); $_SESSION["user"] = "guest"; header("Location: index.php"); ?> Файл "index.php": PHP: <?php session_start(); if (empty($_SESSION["user"])) { echo "You are not registered!"; exit; } ?> <html> <body> Привет, <?php echo $_SESSION["user"]; ?>! </body> </html> А настроено все правильно. Подробнее читай в официальном мане
Я так понял, я использовал deprecated вариант (для PHP < 4.2.0) при PHP/5.2.4. TheShock, Ваш вариант помог, спасибо большое, буду разбираться дальше.
В процессе разбора появился еще вопросик: Зашли на "authorization.php", перекинулись на "index.php", вывели "Привет, guest!", РНР, автоматически послал заголовки, как только скрипт выдал браузеру информацию, после этого, если вернуться на "authorization.php", вместо переброски на "index.php", имеем пресловутую: Вопрос: как граммотные люди поступают в таких случаях?
TheShock, это на другом коде, с вашим вариантом все ок, как оказалось. Просто запутываться начинаю, из-за того, что понимания сильного нет, пожалуй пока все же сам поковыряюсь, пока вопросы более конкретные не появятся. Спасибо!
Посмотри, в конца файла какого-то после ?> пробел лишний закрасться мог. Ну или посмотри, в каком файле и на какой строке начался вывод - поймёшь, в чём проблема.
Я на основе вот этого скрипта http://art.thelib.ru/internet/game/razlichnie_vidi_autentifikacii_polzovateley_nanb_pvebsaytah.html (Аутентификация с использованием сессий) попытался написать свою, слегка измененную версию, к сожалению не работает Кто-нибудь может подсказать? Файлу authorize.php "передается" (захардкодено) логин и пароль, второй файл (somepage.php), по сути любая страница сайта. Полученные ошибки: authorize.php: PHP: <?php $login = "guest"; $password = "d8578edf8458ce06fbc5bb76a58c5ca4"; mysql_connect('localhost', 'root', 'qwe'); mysql_select_db('user'); $user_result = mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password'"); if (mysql_error()) { echo "Unable to connect to DB!"; } else if (mysql_num_rows($user_result) != 1) { echo "Wrong user name or/and password!"; } else { $user = mysql_fetch_assoc($user_result); session_set_cookie_params(1800, "/"); session_start(); $_SESSION["user"] = $username; header("Location: somepage.php"); if ( ! isset($_COOKIE["user"]) ) { setcookie("user", $user, 1800, "/"); } } ?> somepage.php: PHP: <? unset($user); $session_error = false; // IF no opened sessions if ( ! isset($_COOKIE["user"]) ) { $session_error = true; } else { // IF login or/and password are not set if ( ! isset($user["login"]) || ! isset($user["password"]) ) { $session_error = true; } else { session_set_cookie_params(1800, "/"); session_start(); $_SESSION["user"] = $username; } } if ( ! $session_error ) { // IF login and pasword are set // verify if the specified login and password are correct mysql_connect('localhost', 'root', 'qwe'); mysql_select_db('user'); $user_result = mysql_query("SELECT * FROM users WHERE login='{$user[login]}' AND password='{$user[password]}'"); if (mysql_error() || @mysql_num_rows($user_result) != 1) { // IF such user is not found $session_error = true; } } if ($session_error) { // IF user is not registered or no opened sessions session_destroy(); // destroy sessions data if ( ! isset($HTTP_COOKIE_VARS[session_name()]) ) setcookie(session_name(), "", "/"); header("Location: /login.php"); // open login page exit(); } mysql_free_result($user_result); echo "You've authorized!"; ?>
somepage.php, на 6 строке $_COOKIE["user"] пустое, потому не срабатывает session_start(); на четырнадцатой строке, потому , естественно, session_destroy(); на 28 закрывать нечего и потому оно возвращает ошибку. Предложенный способ автризации - ужастен. Если хочешь, я выложу свой вариант.
Тогда сейчас отдельную тему создам, если смогу до него добратся (у меня сейчас /home отмонтирован и с ним gparted работает).
Да, тебе повезло, я вчера как раз одной знакомой два файла нужных на мыло отправлял. В исходящих остались
Большое спасибо! Буду вникать в эту реализацию. Последний вопрос, что думаешь по поводу вот этой реализации: http://www.php.ru/forum/viewtopic.p...er=asc&highlight=headers+already+sent&start=0. Выполнена не объектно, обоснование приведено, следует, по-моему, кодировать данные (в md5, например), а в целом очень понятная и достаточно удобная реализация.
FiMka, как на меня - грязновато. Но в общем то - вроде ничего так. Хешировать надо обязательно. флоппик, не спасет от чего? Представь. Взламывают сайт Вконтакте и получают доступ к базе. Половина пользователей используют один и тот же пароль к доступу ко всем сайтам. Вариант 1. Пароли не хешируются. У взломщиков на руках 10'000'000 паролей пользователей от большинства сайтов + емейлов Вариант 2. Пароли хешируются уникальной фукнцией (даже мд5 с солью). У взломщиков на руках остается управление только взломанным сайтом Надо беспокоится о своих пользователях и если твой сайт взломали - уменьшить риски для них