Я немного изучал PHP, и по большей части это было очень просто. Единственное, что я повесил, – это сеансы для работы. Google неумолимо в этом начинании.
Это может быть одной из двух причин; синтаксис или мое программное обеспечение. В настоящее время я создаю локальный веб-сайт с помощью EasyPHP 5.3.5.0 на компьютере, который не подключен к Интернету. Подключение к Интернету не является вариантом.
То, что я сейчас знаю из сеансов, заключается в том, что многие синтаксисы, связанные с ним, устарели, заменены суперглобальным массивом $_SESSION
, который намного проще в использовании. start_session();
должен быть до любого синтаксиса, относящегося к сеансам. Тем не менее, мой скрипт входа не устанавливает сеанс, так как быстрый !isset ($_SESSION['username'])
всегда возвращает true.
Мой скрипт настроен следующим образом:
PHP включает в login.php, который является формой. check_login.php – это то, что его проверяет, и если запрос возвращает одну строку, он перенаправляет на login_success.php, который устанавливает сеанс, передает приветственное сообщение, а затем перенаправляет (используя JavaScript) на главную страницу.
Есть идеи?
EDIT включить дополнительную информацию:
Вот краткий обзор моего кода:
включить 'main_login.php';
if (! isset ($ _SESSION ['username'])) { ... Форма входа, действие = "cehcklogin.php" method = "post" ... } Еще { var_dump ($ _SESSION): // Просто посмотреть, работает ли он }
Подключение к SQL $ username = $ _POST ['username']; $ password = $ _POST ['password']; $ username / $ password stripslashes / mysql_real_escape_string Запрос, чтобы найти имя пользователя и пароль $ count = mysql_num_rows ($ result); if ($ count = 1) { $ _SESSION ["username"] = $ username; $ _SESSION ["password"] = $ password; заголовок ( "место: login_success.php"); } Еще { echo «Неверное имя пользователя или пароль». }
Процесс входа в систему идет полным ходом, перенаправляет домой, и в этом проблема.
session_start (); var_dump ($ _ SESSION); //Это работает if (! isset ($ _SESSION ['username'])) { заголовок ( "место: index.php"); } Переадресация Javascript и появляется приветственное сообщение.
Все это работает до тех пор, пока вы не перейдете на главную страницу, которая должна быть установлена $_SESSION['username']
, и она не должна отображать форму, но это так.
Похоже, вы не используете session_start()
в своем main_login.php, как указано в etranger. Вы должны вызвать эту функцию в начале каждого нового запроса, чтобы начать использовать сеансы.
В противном случае, если вы вызываете session_start()
и вы просто пренебрегли его отображением в примере кода, то, возможно, идентификатор сеанса теряется во время перенаправления. Используете ли вы сеансы на основе файлов cookie или передаете идентификатор сеанса в качестве параметра URL? Попробуйте напечатать session_id()
или SID
в верхней части каждой страницы. Это сообщит вам, когда сессия потеряна (идентификатор сеанса изменится или будет «»).
Если вы используете сеансы на основе файлов cookie, то, возможно, cookie по какой-то причине теряется. Если вы используете параметр URL для передачи идентификатора сеанса, возможно, прозрачная поддержка идентификатора сеанса работает неправильно.
Вы должны вызвать session_start()
как можно раньше, и определенно перед использованием $_SESSION
, которая в противном случае была бы пустой.