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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Странное поведение сессий [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Champion Супермодератор
Отправлено: 05 Мая, 2009 - 09:07:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




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



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Просто у меня в голове такие мысли:

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

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

На стороне клиента у нас открыто 1 окно браузера. Открыто оно при загрузке первого скрипта. Обращение как ко второму за капчей, так и к голосованию - происходит через яваскрипт в том же окне.
 
My status
 Top
EuGen Администратор
Отправлено: 05 Мая, 2009 - 10:24:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




А через document.cookie пробовали?
+
Первый скрипт, который устанавливает куку, нужно проверить - стандартной отладкой, чтоли. То есть проверять, в каком месте появляется одна кука, и в каком месте появляется нужная непоявляющаяся кука, если все делать правильно (то есть тем способом, который вы пробовали до этого, и который, вроде бы, работает)
Чудес не бывает.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok Модератор
Отправлено: 05 Мая, 2009 - 12:29:50
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Попробуй добавить session_write_close(); в первый скрипт сразу после записи времени в сессию. И ты так и не сказал. Это во всех браузерах ?


-----
Truly yours, Sasha.
 
My status
 Top
Гость
Отправлено: 05 Мая, 2009 - 13:06:31
Post Id


УДАЛЁН










EuGen Да в данном случае исходный метод автора вооще не хорош - cookie устанавливаются с помощью PHP а запросы страниц ajaxовые вот поэтому cookie реально не устанавливаются
И общий совет напоследок - если у вас реально не обновлющаяся станица устанавливает cookie и делать ajaxоподобные запросы то лучше использовать схему чтотот типа document.cookie чтобы cookie реально обновлялись при запросе
 
 Top
Champion Супермодератор
Отправлено: 05 Мая, 2009 - 13:14:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




JustUserR, что значит "реально не обновляющаяся страница", "cookie реально обновлялись", "браузер не устанавлмвает cookie РЕАЛЬНО"
(Добавление)
Точнее, я догадываюсь, что это, но что тогда будет значить "нереально не обновляющаяся страница", "cookie нереально обновлялись", "браузер не устанавлмвает cookie неРЕАЛЬНО"
 
 Top
Гость
Отправлено: 05 Мая, 2009 - 13:40:50
Post Id


УДАЛЁН










Champion Посмотрите тему полностью и увидите что под чем подразумевалось
Под реально обновляющейся страницей подразумевается вот что - с помощью HTTP-заголовков в страницу устанавливаются cookie и эта страница делает допустим с помощью ajaxа запросы других страниц котоыре тоже использую эти cookie - то есть страница сама не обновляется но запускает другие страницы - таким же образом понятно что такое реальная установка cookie - это не момент послания HTTP-заголовка с cookie а момент реального обновления страницы (А не запуска дочерних страниц тупем ajaxа) - аналоничным образом понятно что такое реальная установка cookie
А насчет того что вы понаставили НЕ к этим фразам то можно подразумевтаь страницы в которых cookie устанавливаются а потом эта страница обновляется и в ней уже используется обновленная cookie
ЗЫ Вообще все что названо нереальной установкой cookie формально можно назвать буферизационной задержкой установки cookie перед возможностью чтения ее значения из дочерных страниц запрошенных с помощью ajaxа Улыбка

(Отредактировано автором: 05 Мая, 2009 - 13:42:51)

 
 Top
EuGen Администратор
Отправлено: 05 Мая, 2009 - 13:54:35
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ну или "страница, устанавливающая нереальные куки" - забавно, да и только.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Гость
Отправлено: 05 Мая, 2009 - 14:04:44
Post Id


УДАЛЁН










EuGen Да можно слова перевирать сколько угодно - смысл все равно остается тем же - и суть исходной проблемы и варианты ее решения в общемто понятны Улыбка
 
 Top
Champion Супермодератор
Отправлено: 05 Мая, 2009 - 14:14:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Вот я такую вроде по смыслу похожую штуку накалялкал.
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 видит всё, что понаписали в сессию оба предыдущих. Или это не то же, что у тебя.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB