У меня есть переменная сеанса, которую я задал следующим образом:
<?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')
, она работает как ожидалось, и две строки совпадают. Но это не имеет значения. Любые идеи о том, что здесь происходит?
EDIT: Журнал доступа к Apache:
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, который, как я полагаю, называется «/»), вызывается три раза. Правильно ли я это читаю? Что там происходит?
Полностью глупая ошибка с моей стороны. У меня были некоторые пустые теги <img>
, которые вызывали дополнительные запросы. facepalm Извините, все проблемы решены. Спасибо за вашу помощь!!
Единственное решение, о котором я могу думать, это то, что вы делаете второй запрос на первую страницу, не зная об этом. Вероятно, вы должны проверить свой журнал доступа к Apache для этого второго доступа …
Создание простого счетчика запросов было бы еще одним решением для проверки этого:
$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0;
Вы заметите, что каждый раз, когда вы пересматриваете первую страницу, ваша переменная сеанса будет меняться. Поскольку он работает для постоянной строки, например «example», я предполагаю, что вы перейдете на страницу 1, чтобы просмотреть, что там хранится.
Исправление можно проверить, чтобы убедиться, что эта переменная сеанса не установлена, прежде чем вы установите ее снова. т.е.
<?php session_start(); if(!empty($_SESSION['token'])){ $token = md5(uniqid(rand(), true)); $_SESSION['token'] = $token; } print $_SESSION['token']; ?>
Этот кусок кода должен работать должным образом.
Выглядит странно. Этот первый фрагмент кода, который сбрасывает токен, должен быть запущен снова каким-то образом.