• UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепр
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 449-04-21  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 630-90-82  MTC
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

Хостинг. Хранение проверочного кода в файле сессии

Форумы Хостинг Хранение проверочного кода в файле сессии
admin248
26.12.2013
хостинг: есть
домен: есть
Хранение проверочного кода в файле сессии
Вот простой скрипт:

<?php
session_start();
$cod = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
echo '<!DOCTYPE HTML><html><head></head><body><center><br><br>';
echo 'new cod - '.$cod;

echo '<hr><br>session cod - '.$_SESSION['cod'];
echo '<br>POST cod - '.$_POST['cod'];

echo '<br><br><form method="post" action="">';
echo '<input id="cod" type="text" name="cod" size="5" maxlength="5">';
echo '<input value="post" type="submit">';
echo '</form>';


echo '</body></html>';
$_SESSION['cod'] = $cod;
?>


По идее ( и на моих серверах именно так ) все правильно. Стартуем сессию, генерируем код, показываем на форме, сохраняем код в сессионном файле.
На клиенте должны видеть два одинаковых кода: пришедший по ПОСТ и ранее сохраненный в сессии.
А тут вижу совсем другую картину, код в сессии тот же, что и отображаемый на странице, и естесстно пришедший код с формы клиента не совпадает с кодом, хранящимся в сессии. Вроде как переменную $cod пихаю в сессию вначале, до вывода на клиента, а не в конце.
Такое впечатление, что сначала отрабатываются все операции с сессией, а потом инфа отдается клиену.
Как решать такую проблему? Такое только у меня?
admin248
27.12.2013
хостинг: есть
домен: есть
Попробовал вместо сессии сохранять код просто в файл - все работает.
Что за трабла?????
Ведь при таком раскладе капчи здесь ваще работать не будут, или формирование кода и его проверку нада в разных скриптах делать ( по разным страницам )?
admin248
27.12.2013
хостинг: есть
домен: есть
1
Странно ващета, но уже все работает ( код тот же, прошло 40 мин )
Единственно что сделал - отключил в настройках php.ini в панельке управления буферизацию вывода, но по идее это не должно влиять :(

Ну вроде все, тема закрыта
Приятно было с собой пообщаться :)
Если еще встречу свой пост, обязательно отвечу.
Илья
27.12.2013
хостинг: есть
домен: есть
3
У Вас каждый раз код должен быть разный так как с точки зрения PHP код выглядит так:
session_start();
$cod = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
$_SESSION['cod'] = $cod;


или даже так:

session_start();
$_SESSION['cod'] = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);


Какое бы значение в $_POST вы не передавали оно не присваивается переменной $cod.
admin248
27.12.2013
хостинг: есть
домен: есть
-3
Я чет совсем в шоке, в первом посту не тот код, который я выставлял!!!!!!! Че за бред и кто это делает?
А главное - зачем? Походу былоб не плохо админам на это дело обратить внимание!!!!!!
Вот код, который я выставлял:
========================================================================
<?php
session_start();
$cod = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
echo '<!DOCTYPE HTML><html><head></head><body><center><br><br>';
echo 'new cod - '.$cod;

echo '<hr><br>session cod - '.$_SESSION['cod'];
echo '<br>POST cod - '.$_POST['cod'];

echo '<br><br><form method="post" action="">';
echo '<input id="cod" type="text" name="cod" size="5" maxlength="5">';
echo '<input value="post" type="submit">';
echo '</form>';


echo '</body></html>';
$_SESSION['cod'] = $cod;
?>

=========================================================================
И с алгоритмом все в поряде, сгенерированный $cod попадает в файл сессии после того, как
ушел клиенту в браузер. Попадание посланного по ПОСТ кода в $cod не предусматривается, это просто тест, который показывает что и в каких переменных находится на момент сравнения.
Сравнение ( проверка кода в сессии и пришедшего с формы ) подразумевается сразу после старта сессии.
Работу этого кода можно лицезреть тут http://test.omtc.com.ua/test/
вписываем в очко new cod - и лицезреем переменные на момент сравнения.
Может какой глюк был с серверами, ктож признается :)
А может действительно дело в буферизации было :( (хотя мозг эту зависимость отвергает)

P.S. У меня небывает неработающего кода! :)
admin248
27.12.2013
хостинг: есть
домен: есть
Ну ты глянь, просто чудеса, и код в первом посту уже стал нормальным :)
seryoga89
27.12.2013
хостинг: есть
домен: есть
1
А дело очень даже может быть в буферизации.

Без буферизации вывода каждая команда echo выводит в браузер данные сразу как только встречается в коде, т.е. строка
echo '<hr><br>session cod - '.$_SESSION['cod'];

выведет код сгенерированный при прошлой загрузке страницы.

Если же буферизация включена, то все вызовы echo будут проигнорированы до тех пор пока скрипт не закончит свою работу. Таким образом
$_SESSION['cod'] = $cod;

будет выполнен раньше, чем произойдет echo, а когда дело дойдет до вывода на экран, то код
echo '<hr><br>session cod - '.$_SESSION['cod'];

выведет уже новое значение кода.

Обратите внимание, при включении буферизации теоретически new cod и session cod на странице будут равны.
admin248
27.12.2013
хостинг: есть
домен: есть
Ну... Короче - нада проверить. Щас опять включу буферизацию и через часик посмотрим че выйдет.

seryoga89 - спасибо.
admin248
27.12.2013
хостинг: есть
домен: есть
Аннетс!!! Буферизация тута и непричемсь! С ней тоже все работает.
Rock-N-Roll
31.12.2013
хостинг: есть
домен: есть
Как решать такую проблему? © admin248
вот несколько раз перечитал, а сути вопроса так и не понял. Что Вы пытаетесь сделать?
admin248
31.12.2013
хостинг: есть
домен: есть
Суть вопроса ( проблемы ) изложена в первом посту: по скрипту сохранение данных в переменных сессии производилось в конце выполнения скрипта, а получалось так, что сначала отрабатывались все функции, связанные с сессией, а потом все, что связаны с выводом в поток клиенту, не зависимо от расположения в скрипте. Проблема исчезла без объяснений.
Rock-N-Roll
31.12.2013
хостинг: есть
домен: есть
1
Проблема исчезла без объяснений © admin248
ну так не бывает...

Просто нужно хлопнуть димедрольчика и хорошо выспаца :)
Участвовать в общении на этом форуме могут только
зарегистрированные пользователи.

Если вы уже зарегистрированы Вам необходимо войти на форум.

Тема закрыта по истечению срока давности.
Горячая линия
(044)
392 74 33
другие города