Меня озадачивает странное поведение некоторых переменных сеанса.В частности, переменная "token".
Вот как я ее создаю в index.php :
<?php
session_start();
$_SESSION['token'] = sha1(rand(7451, 98632)); // Lets name it "something"
?>
Затем я выполняю POST с AJAX и передаю егопеременная другого скрипта, ajax_io.php :
Внутри ajax_io.php :
<?php
session_start();
if($_POST['token'] != $_SESSION['token']) die('Horribly');
?>
Моя проверка всегда «умирает»,в то время как токен передается должным образом сообщением javascript AJAX в index.php, $ _SESSION ['token'] в ajax_io.php отличается от того, который создан в index.php.
, например, в ajax_io.php:
The $_POST['token'] appears as "something"
but,
$_SESSION['token'] appears as "something else"
Это похоже на то, что пост AJAX запрашивает index.php (каким-то образом), который создает другой токен, а затем запрашивает ajax_io.php для выполнения запрошенной функциональности.
Вот AJAX-запрос Javascript:
var token = '<?php echo $the_token; ?>';
$.post("ajax_io.php", {
token: token
}, function(data) {
// Do something with data
});
UPDATE :
Я не упомянул, что в реальном скрипте есть цикл foreach и этот циклявляется причиной проблемы.Каким-то образом он переписывает переменную токена php, сгенерированную в каждом цикле, но скрипт сохраняет исходное значение для установки переменной javascript.
$the_token = sha1(mt_rand(10, 100));
$_SESSION['tokens'][] = $the_token; // Notice the multidimensional array here
foreach(somethin) :
// do something other than setting any session variable
endforeach;
print_r( $_SESSION );
Вывод:
Array (
[tokens] => array (
[0] => b19477cb038d6e0f588b6631c1686c8e246b82d5 // The real one created at the beginning of the script
[1] => 51e57c94bfd5c81b11e8c48dc8002b1162f4cd84
[2] => 084c881c074678218a4394524f60d3867da84cb3
)
)
На этомСценарий, если я выведу $ _SESSION, я получу N токенов, например 3. Но только первый - тот, который физически создан моим сценарием, а два других - циклом.Я прошел весь сценарий цикла, но не нашел ничего, что устанавливало бы какие-либо переменные для СЕССИИ.