Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Странное поведение сессий [2]
Форумы портала PHP.SU » PHP » Программирование на PHP » Странное поведение сессий

Страниц (2): « 1 [2]
 

16. Champion - 05 Мая, 2009 - 09:07:10 - перейти к сообщению
Первый скрипт начинает сессию и записывает туда время. Этот же скрипт выводит <img src=2й_скрипт>. 2й скрипт пишет значение капчи в сессию, в которую уже (как нам бы хотелось) уже внесено время.
Но, видимо, на самом деле кука с временем еще к моменту обращения ко второму скрипту не установилась. И во втором скрипте начинается новая сессия. Надо посмотреть, в какой момент установка куки происходит.
Если сделать обновление, то уже будет есть сессия и оба скрипта воспользуются одной.
Я так вижу эту картину.
17. Stierus - 05 Мая, 2009 - 10:12:55 - перейти к сообщению
Просто у меня в голове такие мысли:

Проблема либо на стороне сервера, либо на стороне клиента.

НА стороне сервера выполнение следующего скрипта не начинается до полного выполнения предыдущего скрипта (первый скрипт выводится пользователю, что бы обратиться к картинке капчи - пользователь должен нажать на кнопку, она только во всплывающем сообщении будет, если потребуется. Тоесть идёт полная отработка скрипта на сервере, только потом, если нужно, новый запрос к серверу за капчей. Ну и то же самое с голосованием, только посмотрев на капчу, пользователь начнет её вбивать, а если он её увидел, значит серверный скрипт отработал) Тоесть к серверу идёт стандартное поочередное обращение.

На стороне клиента у нас открыто 1 окно браузера. Открыто оно при загрузке первого скрипта. Обращение как ко второму за капчей, так и к голосованию - происходит через яваскрипт в том же окне.
18. EuGen - 05 Мая, 2009 - 10:24:54 - перейти к сообщению
А через document.cookie пробовали?
+
Первый скрипт, который устанавливает куку, нужно проверить - стандартной отладкой, чтоли. То есть проверять, в каком месте появляется одна кука, и в каком месте появляется нужная непоявляющаяся кука, если все делать правильно (то есть тем способом, который вы пробовали до этого, и который, вроде бы, работает)
Чудес не бывает.
19. valenok - 05 Мая, 2009 - 12:29:50 - перейти к сообщению
Попробуй добавить session_write_close(); в первый скрипт сразу после записи времени в сессию. И ты так и не сказал. Это во всех браузерах ?
20. Гость - 05 Мая, 2009 - 13:06:31 - перейти к сообщению
EuGen Да в данном случае исходный метод автора вооще не хорош - cookie устанавливаются с помощью PHP а запросы страниц ajaxовые вот поэтому cookie реально не устанавливаются
И общий совет напоследок - если у вас реально не обновлющаяся станица устанавливает cookie и делать ajaxоподобные запросы то лучше использовать схему чтотот типа document.cookie чтобы cookie реально обновлялись при запросе
21. Champion - 05 Мая, 2009 - 13:14:52 - перейти к сообщению
JustUserR, что значит "реально не обновляющаяся страница", "cookie реально обновлялись", "браузер не устанавлмвает cookie РЕАЛЬНО"
(Добавление)
Точнее, я догадываюсь, что это, но что тогда будет значить "нереально не обновляющаяся страница", "cookie нереально обновлялись", "браузер не устанавлмвает cookie неРЕАЛЬНО"
22. Гость - 05 Мая, 2009 - 13:40:50 - перейти к сообщению
Champion Посмотрите тему полностью и увидите что под чем подразумевалось
Под реально обновляющейся страницей подразумевается вот что - с помощью HTTP-заголовков в страницу устанавливаются cookie и эта страница делает допустим с помощью ajaxа запросы других страниц котоыре тоже использую эти cookie - то есть страница сама не обновляется но запускает другие страницы - таким же образом понятно что такое реальная установка cookie - это не момент послания HTTP-заголовка с cookie а момент реального обновления страницы (А не запуска дочерних страниц тупем ajaxа) - аналоничным образом понятно что такое реальная установка cookie
А насчет того что вы понаставили НЕ к этим фразам то можно подразумевтаь страницы в которых cookie устанавливаются а потом эта страница обновляется и в ней уже используется обновленная cookie
ЗЫ Вообще все что названо нереальной установкой cookie формально можно назвать буферизационной задержкой установки cookie перед возможностью чтения ее значения из дочерных страниц запрошенных с помощью ajaxа Улыбка
23. EuGen - 05 Мая, 2009 - 13:54:35 - перейти к сообщению
Ну или "страница, устанавливающая нереальные куки" - забавно, да и только.
24. Гость - 05 Мая, 2009 - 14:04:44 - перейти к сообщению
EuGen Да можно слова перевирать сколько угодно - смысл все равно остается тем же - и суть исходной проблемы и варианты ее решения в общемто понятны Улыбка
25. Champion - 05 Мая, 2009 - 14:14:28 - перейти к сообщению
Вот я такую вроде по смыслу похожую штуку накалялкал.
PHP:
скопировать код в буфер обмена
  1. 1.php
  2. <?PHP
  3.         session_start();
  4.         $_SESSION['time'] = time();
  5.         echo 'First script (time)';
  6. ?>
  7. <script>
  8. function getXmlHttp()
  9. {
  10.         var xmlhttp;
  11.         try {
  12.                 xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  13.         }
  14.         catch (e) {
  15.                 try {
  16.                         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  17.                 }
  18.                 catch (E) {
  19.                         xmlhttp = false;
  20.                 }
  21.         }
  22.         if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
  23.                 xmlhttp = new XMLHttpRequest();
  24.         }
  25.         return xmlhttp;
  26. }
  27.  
  28. function ajx_send()
  29. {
  30.         var req = getXmlHttp()
  31.         req.open('GET', '3.php', true);        
  32.         req.send('')
  33.         req.onreadystatechange = function() {
  34.                 if (req.readyState == 4) {
  35.                         if(req.status == 200) {
  36.                            document.getElementById('ajx').innerHTML = req.responseText;
  37.                         }
  38.                 }
  39.     }
  40. }
  41. </script>
  42.  <input type=button onclick=ajx_send()>
  43. <img src=2.php>
  44. <div id=ajx></div>
  45.  
PHP:
скопировать код в буфер обмена
  1. 2.php
  2. <?PHP
  3.         session_start();
  4.         $_SESSION['a'] = 'b';
  5. ?>
PHP:
скопировать код в буфер обмена
  1. 3.php
  2. <?PHP
  3.         session_start();
  4.         echo date('Y m d - h i s', $_SESSION['time']);
  5.         echo '<br>'.$_SESSION['a'];
  6.         session_destroy();
  7. ?>

Вот 3.php видит всё, что понаписали в сессию оба предыдущих. Или это не то же, что у тебя.

 

Powered by ExBB FM 1.0 RC1