Почему значение $ _SESSION ['token'] изменяется при загрузке страницы? - PullRequest
0 голосов
/ 04 ноября 2011

Я создал скрипт.Источник -

Контроллер -

 public function action_index() {
        session_start();
        $_SESSION['token'] = rand();
if (isset($_GET['do']) and $_GET['do'] == 'comment') {//Ja viss kārtībā, turpinam
            var_dump($_POST['token']);
            var_dump($_SESSION['token']);
            if ($_SESSION['token'] == $_POST['token']) {
echo 'ok';
}
else{ echo 'error'; }

Просмотр -

<form action="?do=comment" class="form-komentaram" method="post" style="margin: 7.5px;">
    <input type="text" name="name" required="required" placeholder="Tavs vārds..." /><br />
    <input type="text" name="homepage" placeholder="Tava mājaslapa..." /><br />
    <input type="hidden" name="artcl_id" value="<?php echo $article['id']; ?>" />
    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>" />
    <textarea name="text" required="required"></textarea><br />
    <input type="submit" value="OK!" required="required" />
</form>

С помощью var_dump я вижу, что $ _SESSION ['token'] изменяется при загрузке страницы.Например, я отправляю токен в поле ввода и перезагружаю страницу для проверки токенов, но $ _SESSION ['token'] до перезагрузки страницы был 23456, а $ _POST ['token'] равен 23456, но после перезагрузки страницы токен $ _SESSION [''] - 12345. Почему?

Ответы [ 4 ]

1 голос
/ 04 ноября 2011

Согласно опубликованному вами коду, $ _SESSION ['token'] будет заменяться новым значением при каждом вызове action_index ().Должен сделать что-то вроде:

if (!array_key_exists('token', $_SESSION)) {
    $_SESSION['token'] = rand();
}

Тогда любые последующие вызовы action_index () не будут переопределять значение вашего токена сеанса.

1 голос
/ 04 ноября 2011

Поскольку вы присваиваете ему случайное значение при каждой загрузке страницы.

        $_SESSION['token'] = rand(); 

Тогда вы повторяете это как скрытый ввод. "/>

Так что в следующий раз, когда вы отправите форму, она будет иметь отраженное значение.

Если вы хотите назначить его один раз для сеанса, выполните:

if (!$_SESSION['token']) {
    $_SESSION['token'] = rand();
}
0 голосов
/ 04 ноября 2011
$_SESSION['token'] = rand();

Самое первое, что вы делаете, когда используете сеанс здесь, задаете $_SESSION['token'] случайное значение. Таким образом, каждый раз, когда код используется, значение будет отличаться. (Или, по крайней мере, очень может быть другим.)

Возможно, вы захотите проверить значение перед тем, как присвоить ему случайное значение, или назначить случайное значение, когда сеанс начинается в другом месте кода, а не при загрузке каждой страницы.

0 голосов
/ 04 ноября 2011
$_SESSION['token'] = rand();

Вы явно меняете значение $_SESION['token'].

...