PHP Sessions - пользователь не сохраняется после входа в систему - PullRequest
2 голосов
/ 09 июля 2010

Я создаю базовую защищенную паролем область на своем веб-сайте, и у меня есть форма входа.

<!-- login.php -->
<?php
session_start();
?>
<?php if(!empty($_SESSION['user'])) { ?>
<form>
    <input type="text" name="username" />
    <input type = "password" name = "password" />
    <input type="submit" value = "login" />
    <input type="hidden" name="token" value="KdasS2wFgw24F7hh" />
</form>
<?php } else { ?>
You are already logged in.
<? } ?>


<!-- dologin.php -->

<?php
$allowed = //sql checking db
if($allowed > 0) {
    $_SESSION['user'] = $row['user_id'];
}
header("Location: login.php");
?>

Ответы [ 2 ]

9 голосов
/ 09 июля 2010

Вы пропустили session_start () в верхней части вашего dologin.php.Требуется в верхней части каждой страницы перед началом любого вывода.

Без session_start(); у вас не будет доступа для создания или обновления переменной сеанса (в вашем случае $ _SESSION ['user'])

session_start(): http://php.net/manual/en/function.session-start.php

Также - еще один полезный совет:

Я заметил, что вы неполучил exit(); после вашего header(); Это понадобится вам, чтобы, если пользователь обновит login.php после входа в систему, браузер не будет повторно отправлять опубликованные данные в dologin.php

Также -Еще один полезный совет:

У вас есть

<?php if(!empty($_SESSION['user'])) { ?>

Вы, вероятно, хотите

<?php if(empty($_SESSION['user'])) { ?> // No `!`

Вы захотите показать форму входа, если нет $ _SESSION ['user']

Итак, ваш окончательный код будет выглядеть так:

<!-- login.php -->
<?php
session_start();
?>
<?php if(empty($_SESSION['user'])) { ?>
<form>
    <input type="text" name="username" />
    <input type = "password" name = "password" />
    <input type="submit" value = "login" />
    <input type="hidden" name="token" value="KdasS2wFgw24F7hh" />
</form>
<?php } else { ?>
You are already logged in.
<? } ?>


<!-- dologin.php -->

<?php

session_start();

$allowed = //sql checking db
if($allowed > 0) {
    $_SESSION['user'] = $row['user_id'];
}
header("Location: login.php");
exit();
?>
1 голос
/ 09 июля 2010

Вы проверяете if (!empty($_SESSION['user'])), но прежде чем они войдут в систему, $_SESSION['user'] должно быть пустым. В этом случае они получат сообщение «Вы уже вошли в систему». вместо формы входа в систему, но поскольку там нет формы, проверять нечего, поэтому нет возможности войти в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...