Проблема, связанная с переменными PHP $ _SESSION - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть форма входа, в которой хэши паролей из базы данных.Если «проверка отправки» <input type="hidden"> равна 1 (пример ниже объяснит это лучше), то раскрывается содержимое страницы, если оно не равно 1, отображается форма входа в систему.Форма выглядит следующим образом:

<div id="login" style="<?php echo $style ?>"> //$style is by default "visibility:visible;" but will change to "visibility:hidden;" when correct login info is given
<p>Log in</p>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="text" id ="username" name="username" value="Username" onfocus="if (this.value == 'Username') this.value=''">
<input type="password" id="password" name="password" value="passpass" onfocus="if (this.value == 'passpass') this.value=''">
<br>
<input type="submit" name="submit" value="Log Ind">
<input type="hidden" name="_submit_check" value="1"> //Submit checker. if set, process login information
</form>
</div>
<p>No user? Make one <a href="register.php">here.</a></p>
</div>

Это прекрасно работает с моим примером PHP, но есть одна маленькая раздражающая вещь ... Вы должны входить в систему каждый раз, когда просматриваете страницу.Поэтому я сделал это в своем PHP-скрипте:

<?php

    session_start();

    $db = DB::connect('mysql://username:pass@host/database');
    if (DB::isError($db)){
        die("Can't connect: " . $db->getMessage());
    }
$style = "visibility:visible;";

$passwordHash = sha1($_POST['password']);
$_SESSION['login'] = $_POST['_submit_check']; //This is the submit checker I mentioned before

$sql = 'SELECT username FROM user WHERE username = ? AND passwordHash = ?';
$result = $db->query($sql, array($_POST['username'], $passwordHash));
if ($_SESSION['login'] == 1) {
    if ($result->numRows() < 1)
    {
        echo '<p>Correct your username and password please</p>';
    }
    else {
        $style = "visibility: hidden;";
        echo '<p>This is the page content</p>';
    }
}
?>

Разве тот факт, что я добавляю значение $ _POST ['_ submit_check'] к переменной $ _SESSION [], называемой 'login', делает только пользователейТребовать войти каждые 24 минуты?Это то, чего я хочу, но этого не происходит ...

Надеюсь, вы понимаете мой вопрос, если нет, оставьте комментарий о том, чего вы не понимаете.Мне было трудно объяснить мои мысли в этом вопросе;)

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Вы перезаписываете $_SESSION['login'] каждый запрос, потому что вы присваиваете значение $ _POST без проверки, действительно ли оно установлено.

if(isset($_POST['_check_submit'])) {
   $_SESSION['login'] = $_POST['_check_submit'];
}
1 голос
/ 15 сентября 2010

Я не уверен на 100%, потому что другого кода не дано, но вы, похоже, пропускаете вызов session_start(), необходимый для запуска или загрузки сеанса.К сожалению, $_SESSION недостаточно волшебно, чтобы начать сеанс от вашего имени.Без этого вызова $_SESSION будет пустым в начале каждого сценария и никогда не будет инициализироваться данными сеанса.

Сказав это, можно настроить PHP для автоматического запуска сеансов для каждого сценария,используя директиву session.auto_start php.ini, при условии, что у вас достаточно прав для ее изменения.

...