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 :: Странное поведение сессий

 PHP.SU

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


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

> Без описания
Stierus Супермодератор
Отправлено: 04 Мая, 2009 - 09:31:08
Post Id



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


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


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




Интересная штука у меня тут нарисовалась, пишу по порядку :

Есть сайт, на нем организовано голосование, вся схема состоит из трех файлов:
1. Скрипт, генерирующий страницу голосования
2. Скрипт генерирует Captcha-картинку
3. Скрипт принимает голоса

Соответственно все они связаны сессиями. В первом скрипте открывается сессия, куда заносится время открытия страницы. Первый скрипт отрабатывает и выдает страницу клиенту. В этой странице есть <img src="" ...>, ведущий на второй скрипт, генерирующий капчу. Значение на картинке, опять же, заносится в сессию. К третьему скрипту идёт обращение через ajax из первого скрипта. Тоесть через Геты туда передаётся Id, за который голосовать и значение капчи, введённое пользователем. Этот третий скрипт тоже открывает сессию, читает содержимое полей, заполненых первым и вторым скриптом и заносит в базу данных.

Теперь что не так :
Этот третий скрипт не видит значение сессии, заполненное в первом скрипте Улыбка Тоесть переменная в персом скрипте не записывается в сессию. Самое интересное, что если первую страницу рефрешить после записи в сессию (стоит условие, что если есть переменная в сессии - выводим содержимое, если нет - создаем переменную и Header на самого себя) - то переменная в сессии появляется.

По моей логике все три скрипта работаю последовательно, пользователь не запрашивает капчу до момента, пока не загрузилась страница, на которой ссылка на эту капчу (а её он может увидеть только после отработки скрипта), проголосовать он так же может только после того, как сгенерирована и страница и капча ... (мухлежа точно не было, тестировал сам)
 
My status
 Top
Гость
Отправлено: 04 Мая, 2009 - 10:19:49
Post Id


УДАЛЁН










Stierus Проблема ваша конечно странная но ведь можно оставить и walkaround - как вы и говорите еслит переменных в сесси не было то первая страница рефрешит сама себя один разок и потом уже передается то что надо
 
 Top
Stierus Супермодератор
Отправлено: 04 Мая, 2009 - 10:22:43
Post Id



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


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


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




Да оставить можно что угодно, но хотелось бы знать, почему происходит такая странность Улыбка
 
My status
 Top
EuGen Администратор
Отправлено: 04 Мая, 2009 - 10:30:58
Post Id


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


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


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




Вот и посмотрите после первой загрузки, создаются ли на стороне клиента соответствующие куки. Что-то мне подсказывает, что нет


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



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


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


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




очистил куки, пробую запустить скрипт с рефрешем. Первый раз куки не отправляются ( что естественно), устанавливаются, после рефреша ранее установленная кука уже идёт в скрипт.
 
My status
 Top
EuGen Администратор
Отправлено: 04 Мая, 2009 - 10:45:12
Post Id


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


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


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




Ну вот, примерно то же самое будет, если сделать в скрипте:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. setcookie("TestCookie", $value);
  4. print_r($_COOKIES);//тут - пусто
  5. ?>
  6.  


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


УДАЛЁН










Stierus Вам всетаки придется делать указанный выше walkaround ИБО когда ваша страница создает cookie н не перезапускается она с помощью ajaxа вызывает другую страницу и та пытается читать cookie но браузер по какимто причинам не обновляет cookie установленные первой страницей и во вторую ничего не отправляется
Как вариант walkaroundа можно использовать document.cookie и там вручную поставить то что надо
 
 Top
Stierus Супермодератор
Отправлено: 04 Мая, 2009 - 10:50:20
Post Id



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


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


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




Так я и не запрашиваю куки в том же скрипте. Я их установил и забыл. а тоько в третем скрипте (обращение к которому через ajax) я смотрю на значение. Причём в куки идёт на значение, а сессионный id.

Тоесть мне непонятна ситуация. Раньше сессия в первом скрипте не открывалась, она первый раз открывалась во 2-м скрипте, генерирующем капча-код. Так вот там так же значение записывалось в сессию и все. Но 3-й скрипт прекрасно видел значение. тут мы добавили ещё 1 скрипт, работающий с той же сессией, предыдущие 2 все так же нормально записывают и читают, а этот ...
 
My status
 Top
EuGen Администратор
Отправлено: 04 Мая, 2009 - 10:54:12
Post Id


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


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


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




Мне почему-то кажется, что это именно такой случай, так как, скорее всего, обращение к кукам пытается выполниться "с ходу". Возможно, я не прав, но я предположил, что это именно так. Сказать точно-то не могу, не видел, что именно там у Вас написано (то есть, по логике-то одно, а как реализовано - вопрос другой)


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



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


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


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




Смотри :

было:

3 скрипта:
1. Скрипт выводит страницу
2. Первое обращение к сессии, запись значения кода капчи в сессию, вывод картинки
3. Чтение сессионной капчи, работа с бд

Все работало отлично

Стало:

3 скрипта:
1. Первое обращение к ессии, запись времени в сессию, вывод страницы
2. Второе обращение к сессии, запись значения кода капчи в сессию, вывод картинки
3. Чтение сессионныч капчи и времени, работа с бд

Сессионная капча видна, сессионное время не видно
 
My status
 Top
Champion Супермодератор
Отправлено: 04 Мая, 2009 - 11:00:07
Post Id



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


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


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




Stierus пишет:
1. Скрипт, генерирующий страницу голосования
2. Скрипт генерирует Captcha-картинку
3. Скрипт принимает голоса
Stierus пишет:
В первом скрипте открывается сессия, куда заносится время открытия страницы
А попробуй сделать 0ю страницу, которая отрабатывает перед 1й и стартуй сессию в ней. И из нее иди на 1ю страницу...
Где-то была у меня похожая штука, сейчас попытаюсь найти. Тоже скрипт, к которому обращение аяксом сессии не видел.
 
 Top
Stierus Супермодератор
Отправлено: 04 Мая, 2009 - 11:03:09
Post Id



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


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


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




ну я вместо этой нулевой и сделал рефреш на самого себя Улыбка Только мне непонятно, если проблема такая возникает, почему она не возникла раньше когда я сессию в капче первый раз стартовал и точно так же через ajax запрашивал третий скрипт ?
 
My status
 Top
Гость
Отправлено: 04 Мая, 2009 - 11:18:45
Post Id


УДАЛЁН










Stierus Вобщем еще раз повторюсь - как я уже писал ваша проблема состоит изза того что тот скрипт которуму нужна сессионная кука читает ее до момента как браузер ее РЕАЛЬНО установил посему вам в данной схеме не обойтись без такого рода walkaroundа Улыбка
 
 Top
valenok Модератор
Отправлено: 04 Мая, 2009 - 17:50:54
Post Id



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


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


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




А почему во втором случае он её реально устанавливает, а в первом нереально устанавливает ? Что-то мне подсказывает что тут без экспериментов с кодом не обойтись.
И так во всех браузерах, кстати ?


-----
Truly yours, Sasha.
 
My status
 Top
Гость
Отправлено: 04 Мая, 2009 - 19:32:44
Post Id


УДАЛЁН










valenok Скорее всеге не во всех
Ведь проблемато вроде в том что браузер не устанавлмвает cookie РЕАЛЬНО и поэтому без перезагрузк страницы значения не выдаются
Как я уже и говорил можно вручную с помощью document.cookie менять
 
 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