avatar

Laravel session not working and 419 error cfrs token

Рейтинг 3.6 из 5. Голосов: 3094
Krasavica 1 год назад
3
,

0


Ответы (3)

Krasavica
, Kiyv
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
805 Dec 13
1 год назад
следует выяснить следующее:
CODE:
1 Включен-ли механизм передачи идентификаторов сессий на хостинге? Вывести значение code session_id() /code (если PHP собран без поддержки сессий будет выдана ошибка об отсутствии функции) или связаться с провайдером
CODE:
2 Вызывается-ли функция code session_start() /code ? Иногда бывает так, что старт сессии происходит в поключаемом при каком-либо условии файле или функции. Чтобы удостовериться можно создать перед сессией искуственную критическую ошибку или вывод контрольной строки в em error_log /em
CODE:
3 Появляются-ли в em error_log /em новые ошибки? При их появлении следует устранить причины их появления
CODE:
4 Меняется-ли каждом входе на страницу значение функции code session_id() /code в рамках одной сессии? Если не меняется, то скорее всего данные сессии не сохраняются и в п. 2 будет соответствующая ошибка (невозможность записи в файл или если применяются другие механизмы хранения сессии могут быть проблемы записи в базу). Если меняется, то нужно переходить к следующему пункту
CODE:
5 Передаются-ли куки от сервера к клиенту и обратно? /strong Нужно смотреть на HTTP-заголовки запроса code Cookie /code и заголовки ответа code Set-Cookie /code при помощи средств разработки браузера или при помощи сниффера (например em Wireshark /em или em tcpdump /em ). Если они не передаются от браузера говорит о запрете их хранения в браузере. Если куки не передаются к браузеру говорит о том, что заголовки не передаются из-за того, что PHP-скрипт уже начал формировать контент страницы до начала сессии. Одна из причин, приводящих к этой проблеме - наличие https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2 маркера последовательности байтов в начале PHP-скрипта.
CODE:
6 Некоторые фремворки например Laravel Simphony не используют встроенную сессию сами ее создают на основе куки(ErrorException (E_NOTICE)Undefined variable: _SESSION)при вызове dd($_SESSION) это может быть связано, например, с использованием неверного типа шифрования AES-256-CBCшифрование выполняет библиотека OpenSSL имеются проблемы в библиотеке OpenSSL 1.0.1e-fips 11 Feb 2013поэтому лучше использовать OpenSSL Library Version OpenSSL 1.1.0i 14 Aug 2018иOpenSSL Library Version OpenSSL 1.0.2k-fips 26 Jan 2017
CODE:
7корректно ли настроен в php Garbage Collector а сессийВ php за работу GC для сессий отвечают 3 параметра: session.gc_probability, session.gc_divisor и session.gc_maxlifetime.Эти параметры говорят о следующем: в gc_probability из gc_divisor запусков session_start запускается GC, который должен очистить сессии со временем последнего обращения больше, чем gc_maxlifetime.
отправить
+ 0

Krasavica
, Kiyv
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
805 Dec 13
1 год назад
1. Вы забыли запустить сессию Пожалуй, это самая распространённая причина почему не сохраняется сессия. Запуск сессии посредством функции session_start() должен осуществляться на каждой странице, где используется сессия. Лучше всего session_start() писать сразу после открывающего тега ?php 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’е.
отправить
+ 0

Krasavica
, Kiyv
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
805 Dec 13
1 год назад
чтобы проверить что проблема с шифрованием можно попробовать его отключить в app Http Kernel.php ..... protected $middlewareGroups = [ web = [ // App Http Middleware EncryptCookies::class, Illuminate Cookie Middleware AddQueuedCookiesToResponse::class, Illuminate Session Middleware StartSession::class, Illuminate Session Middleware AuthenticateSession::class, Illuminate View Middleware ShareErrorsFromSession::class, App Http Middleware VerifyCsrfToken::class, Illuminate Routing Middleware SubstituteBindings::class, ],
отправить
+ 0


Чтобы оставить комментарий войдите или зарегистрируйтесь