Управление файлами cookie, которые используются для рекламы, таких как персонализация рекламы, ремаркетинг и анализ эффективности рекламы.
|
OMTC
26.12.2013 23:24
0
|
Вот простой скрипт:
<?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 пихаю в сессию вначале, до вывода на клиента, а не в конце. Такое впечатление, что сначала отрабатываются все операции с сессией, а потом инфа отдается клиену. Как решать такую проблему? Такое только у меня? |
|
OMTC
27.12.2013 00:09
0
|
Попробовал вместо сессии сохранять код просто в файл - все работает.
Что за трабла????? Ведь при таком раскладе капчи здесь ваще работать не будут, или формирование кода и его проверку нада в разных скриптах делать ( по разным страницам )? |
|
OMTC
27.12.2013 01:06
1
|
Странно ващета, но уже все работает ( код тот же, прошло 40 мин )
Единственно что сделал - отключил в настройках php.ini в панельке управления буферизацию вывода, но по идее это не должно влиять :( Ну вроде все, тема закрыта Приятно было с собой пообщаться :) Если еще встречу свой пост, обязательно отвечу. |
|
rudenko
27.12.2013 10:00
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. |
|
OMTC
27.12.2013 11:14
-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 не предусматривается, это просто тест, который показывает что и в каких переменных находится на момент сравнения. Сравнение ( проверка кода в сессии и пришедшего с формы ) подразумевается сразу после старта сессии. Работу этого кода можно лицезреть тут test.omtc.com.ua/test/ вписываем в очко new cod - и лицезреем переменные на момент сравнения. Может какой глюк был с серверами, ктож признается :) А может действительно дело в буферизации было :( (хотя мозг эту зависимость отвергает) P.S. У меня небывает неработающего кода! :) |
|
OMTC
27.12.2013 11:22
0
|
Ну ты глянь, просто чудеса, и код в первом посту уже стал нормальным :)
|
|
seryoga89
27.12.2013 12:22
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 на странице будут равны. |
|
OMTC
27.12.2013 15:16
0
|
Ну... Короче - нада проверить. Щас опять включу буферизацию и через часик посмотрим че выйдет.
seryoga89 - спасибо. |
|
OMTC
27.12.2013 19:46
0
|
Аннетс!!! Буферизация тута и непричемсь! С ней тоже все работает.
|
|
Rock-N-Roll
31.12.2013 00:30
0
|
Как решать такую проблему?© admin248 вот несколько раз перечитал, а сути вопроса так и не понял. Что Вы пытаетесь сделать? |
|
OMTC
31.12.2013 11:39
0
|
Суть вопроса ( проблемы ) изложена в первом посту: по скрипту сохранение данных в переменных сессии производилось в конце выполнения скрипта, а получалось так, что сначала отрабатывались все функции, связанные с сессией, а потом все, что связаны с выводом в поток клиенту, не зависимо от расположения в скрипте. Проблема исчезла без объяснений.
|
|
Rock-N-Roll
31.12.2013 12:05
1
|
Проблема исчезла без объяснений© admin248 ну так не бывает... Просто нужно хлопнуть димедрольчика и хорошо выспаца :) |
Тема закрыта.