Изменения переменной сеанса PHP между страницами - PullRequest
5 голосов
/ 19 сентября 2010

У меня есть переменная сеанса, которую я установил следующим образом:

<?php
$token = md5(uniqid(rand(), true));
session_start();
$_SESSION['token'] = $token;
print $_SESSION['token'];
?>

Тогда на другой странице у меня есть это:

<?php
session_start();
print $_SESSION['token'];
?>

Проблема в том, что они не совпадают. Я получаю две совершенно разные строки. register_globals выключен. Я заметил, что когда я установил md5(....) в постоянную строку, например: md5('example'), она работает, как ожидалось, и две строки совпадают. Но это не должно иметь значения. Есть идеи о том, что здесь происходит?

РЕДАКТИРОВАТЬ: Apache Acces Log:

127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /style/style.css HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /js/signup.js HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:10 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"

Я не совсем уверен, как это прочитать, но мне кажется, что мой файл (index.php, который я предполагаю '/') вызывается три раза Я читаю это правильно? Что там происходит?

Ответы [ 4 ]

3 голосов
/ 19 сентября 2010

Совершенно глупая ошибка с моей стороны.У меня были пустые теги <img>, которые вызывали дополнительные запросы. facepalm Извините всех, проблема решена.Спасибо за вашу помощь !!

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

Единственное решение, о котором я могу подумать, это то, что вы делаете второй запрос на первую страницу, не зная об этом. Вам, вероятно, следует проверить журнал доступа Apache для этого второго доступа ...

Создание простого счетчика запросов было бы другим решением для проверки этого:

$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0;
2 голосов
/ 19 сентября 2010

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

Исправление может проверять, чтобы убедиться, что эта переменная сеанса не установлена, прежде чем вы установите ее снова. т.е.

<?php
session_start();
if(!empty($_SESSION['token'])){
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
}
print $_SESSION['token'];
?>

Этот кусок кода должен работать как положено.

1 голос
/ 19 сентября 2010

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

...