Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сессионные чудеса
 
 автор: Владимир55   (11.11.2014 в 16:38)   письмо автору
 
 

Сайт нормально работает уже давно, как вдруг выяснилось, что при просмотре нескольких его вполне конкретных страниц браузерами Опера и Яндекс дизайн разваливается и выводится несколько сообщений, связанных с сессиями.

Первое сообщение такое:
Warning: session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/b/rubric.php on line 4

Это самое начало скрипта и в нем коды такие:
 <?php
 
    ob_start
();
    
session_start(); 


Поскольку браузер только открылся, то вопрос длины сессии отпадает.

Решил посмотреть саму сессию и дописал:
echo "<br />session_id " . session_id(); 

Получаем:
session_id 864d8a84234997f878d0065d52797b47

В Хроме, Нихроме, Сафари, Мозилла и Maxthon все работает нормально. Проблема только в Опера и Яндексе.

Что это может быть и где искать причину?

  Ответить  
 
 автор: elenaki   (12.11.2014 в 08:48)   письмо автору
 
   для: Владимир55   (11.11.2014 в 16:38)
 

BOM?
У меня иногда такое бывает, когда я редактирую онлайн. Не
все редакторы настроены сохранять файлы без BOM.

  Ответить  
 
 автор: Trianon   (12.11.2014 в 09:23)   письмо автору
 
   для: elenaki   (12.11.2014 в 08:48)
 

эээ.. судя по диагностике, BOM тут никоим боком...

  Ответить  
 
 автор: confirm   (12.11.2014 в 10:32)   письмо автору
 
   для: Владимир55   (11.11.2014 в 16:38)
 

The session id is too long...

Это не Поскольку браузер только открылся, то вопрос длины сессии отпадает, это о длине id сессии.

Проверьте рег. выражением наличие в id символов недопустимых, то есть кроме a-z, A-Z, 0-9.

  Ответить  
 
 автор: Trianon   (12.11.2014 в 10:45)   письмо автору
 
   для: Владимир55   (11.11.2014 в 16:38)
 

... например, так:
echo "<br />session_id hex value: " . bin2hex(session_id()); 

  Ответить  
 
 автор: Владимир55   (12.11.2014 в 14:10)   письмо автору
 
   для: Trianon   (12.11.2014 в 10:45)
 

Проблема оказалась в том, что на сайте использовался скрипт, подкачивающий данные через Аякс. При этом Браузеры Опера и Яндекс вызванной странице и подкачиваемому файлу давали разные сессии, тогда как все прочие браузеры открывали для всего процесса единую сессию.

Проблема разрешилась изменением алгоритма и отказом от использования сессий.

  Ответить  
 
 автор: confirm   (12.11.2014 в 14:45)   письмо автору
 
   для: Владимир55   (12.11.2014 в 14:10)
 

Сессию формирует сервер, а не браузер, а ему вообще не известно асинхронный ли это запрос или нет, если только не сообщить ему об этом, так что продолжать сессию он будет в любом случае, если это делается корректно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования