|
|
|
| Сайт нормально работает уже давно, как вдруг выяснилось, что при просмотре нескольких его вполне конкретных страниц браузерами Опера и Яндекс дизайн разваливается и выводится несколько сообщений, связанных с сессиями.
Первое сообщение такое:
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 все работает нормально. Проблема только в Опера и Яндексе.
Что это может быть и где искать причину? | |
|
|
|
|
|
|
|
для: Владимир55
(11.11.2014 в 16:38)
| | BOM?
У меня иногда такое бывает, когда я редактирую онлайн. Не
все редакторы настроены сохранять файлы без BOM. | |
|
|
|
|
|
|
|
для: elenaki
(12.11.2014 в 08:48)
| | эээ.. судя по диагностике, BOM тут никоим боком... | |
|
|
|
|
|
|
|
для: Владимир55
(11.11.2014 в 16:38)
| | The session id is too long...
Это не Поскольку браузер только открылся, то вопрос длины сессии отпадает, это о длине id сессии.
Проверьте рег. выражением наличие в id символов недопустимых, то есть кроме a-z, A-Z, 0-9. | |
|
|
|
|
|
|
|
для: Владимир55
(11.11.2014 в 16:38)
| | ... например, так:
echo "<br />session_id hex value: " . bin2hex(session_id());
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.11.2014 в 10:45)
| | Проблема оказалась в том, что на сайте использовался скрипт, подкачивающий данные через Аякс. При этом Браузеры Опера и Яндекс вызванной странице и подкачиваемому файлу давали разные сессии, тогда как все прочие браузеры открывали для всего процесса единую сессию.
Проблема разрешилась изменением алгоритма и отказом от использования сессий. | |
|
|
|
|
|
|
|
для: Владимир55
(12.11.2014 в 14:10)
| | Сессию формирует сервер, а не браузер, а ему вообще не известно асинхронный ли это запрос или нет, если только не сообщить ему об этом, так что продолжать сессию он будет в любом случае, если это делается корректно. | |
|
|
|