No Image

Сохранение сессии без useragent ошибка не работает

СОДЕРЖАНИЕ
14 просмотров
05 мая 2020

Когда вебмастер начинает работать с сессиями, он часто сталкивается с тем, что сессия не сохраняется при переходе на другую страницу. Причин может быть множество, ниже представлен список наиболее распространённых, изучив которые, вы сможете решить проблему.

Почему не сохраняется сессия при переходе на другую страницу?

1. Вы забыли запустить сессию

Пожалуй, это самая распространённая причина почему не сохраняется сессия. Запуск сессии посредством функции session_start(); должен осуществляться на каждой странице, где используется сессия. Лучше всего session_start(); писать сразу после открывающего тега

2. Сессия уничтожается в коде

Прежде чем пропускать этот пункт и идти далее с мыслью «Да ну, бред какой-то, нигде я сессию не уничтожаю.», удостоверьтесь, действительно ли вы нигде не очищаете сессию? Уничтожить сессию можно с помощью функции session_destroy(); или вы можете очистить значения сессии путём следующей конструкции: unset($_SESSION[‘name’]); . Убедитесь, что у вас этого нет.

3. Хранилище сессии недоступно для записи

Для начала проверьте куда у вас записывается сессия. Выполните phpinfo(); и посмотрите значение параметра session.save_path . Это и есть директория, куда сохраняется сессия. Зайдите в неё и посмотрите, есть ли там файлы типа "0Thee5g9vsknDhen14kyYt5lv7" . Если файлов нет, значит сессия не может сохраниться, посмотрите правильно ли выставлены права доступа к директории.

4. После отправки заголовка не используется exit();

В случае, если на странице отправляются заголовки при помощи функции header() , необходимо добавить конструкцию exit(); или session_write_close(); , чтобы сессия могла корректно отработать.

5. Cookies не включены в браузере

Убедитесь, что использование cookies разрешено в браузере, в котором используется сайт.

6. Редирект с одного домена на другой

При редиректе с одного домена на другой сессия потеряется. Даже если это один домен и он отличается наличием «www», например при перенаправлении с «site.com» на «www.site.com» сессия пропадёт, убедитесь, что у вас этого не происходит.

Читайте также:  Программа передач на сегодня уфанет стерлитамак

7. У вас нет favicon.ico

Пожалуй, самая экзотическая из всех вышеперечисленных причин, почему сессия может не сохранятся. Я не знаю почему так происходит, но если у вас нет favicon’а на сайте, браузер Google Chrome может «потерять» вашу сессию. Это бывает не на всех серверах, подобный глюк я обнаружил на nginx’е.

Здравствуй дорогой читатель! Я рад приветствовать тебя на страницах моего блога. Уже несколько лет я занимаюсь веб-программированием и рад поделиться с тобой своими знаниями и советами. Если тебе понравились мои статьи, ты можешь подписаться на рассылку блога, из неё ты узнаешь много интересного!

Разработчики системы битрикс рекомендуют своим клиентам проверять конфигурацию сервера специальным скриптом bitrix_server_test.php. На этом этапе довольно часто возникают проблемы с конфигурацией сервера и скрипт помогает определить готовность конфигурации веб-сервера для развертывания проекта на битриксе. Некоторые сообщения в скрипте не совсем информативны, в том плане что найти по ним причину ошибки не просто.

Одним из таких сообщений является «Сохранение сессий без UserAgent». Вроде бы понятно, но в то же время не ясно куда смотреть. В конце концов, немного поискав на форумах, и не найдя ничего конкретного решил залезть в сам скрипт. Отыскав строку (примерно на линии 622), где происходит эта ключевая ошибка, нашел такую запись, которая собственно и подсказала точную причину ошибки.

Проблема была в том, что у функции fsockopen не удавалось подключиться к хосту, а само сообщение об ошибке помещалось в переменную $errstr. В переменной $errstr было следующее:

Иными словами, не удалось получить имя хоста. Проблему удалось решить довольно просто, т.к. сервер поднимался на виртуальной машине под CentOS, то в конфигурационном файле /etc/host было достаточно прописать доменное имя сайта.

Читайте также:  Launch pxe oprom policy что это

В общем обновили на сервере php до 7й версии. Скорость порадовала. Конечно же появилось куча ошибок, потихоньку исправляю, но есть один затык:
В $_SESSION ничего не сохраняется. Точнее сохраняется, но только в текущей функции. Т.е:
шаг 1)Пишем в сессию , выводим из сессии. ОК! Вывелось.
шаг 2)Просто выводим из сессии. Ничего нет. Пусто.

Откуда ноги? Админ говорит что все верно настроил, проблема на моей стороне, но я уже пол дня вожусь.
В доках php7 обновлений касающихся сессий не нашел(
PS на php 5.5 все работает корректно.
session.save_path у 7 и 5.5 одинаковый(стоят сразу несколько версий, можно переключаться)

  • Вопрос задан более трёх лет назад
  • 2514 просмотров

В итоге виноват админ. Не я. Решение проблемы(для тех кто пришел сюда из поиска)

В данном случае была проблема, что по умолчанию сессии хранятся в редисе, но в php7 сохранение сессий в редис не отрабатывает корректно. Перенаправил сохранение сессий в файл, после чего заработало всё корректно.

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

Комментировать
14 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock
detector