Почему то анулируется $_SESSION после перезагрузки страницы?
всем здравствуйте! Столкнулся с какой-то магией вне хогвартса, как говорится.
Есть код:
session_start(); $ifAdmin = 1; if(isset($_SESSION["loged"])){ $ifAdmin = 2; } echo $ifAdmin; if($_POST["enter"]){ $password = filter_input(INPUT_POST, "password", FILTER_SANITIZE_SPECIAL_CHARS); if($password == "admin"){ $_SESSION["loged"] = "yes"; echo"yes"; } } |
session_start(); $ifAdmin = 1; if(isset($_SESSION["loged"])){ $ifAdmin = 2; } echo $ifAdmin; if($_POST["enter"]){ $password = filter_input(INPUT_POST, "password", FILTER_SANITIZE_SPECIAL_CHARS); if($password == "admin"){ $_SESSION["loged"] = "yes"; echo"yes"; } }
Да, проверка на наличие топорна, но это я уже от безысходности сделал. Почему то после прохождения условия пароля $_SESSION не сохраняется. Если вывести сразу после записи - все окей, а вот когда страница уже перезагрузиться - пустота, помогите пожалуйста разобраться, заранее всем спасибо!
Дополнительно:
Ubuntu_Pro, Ничего не произошло... Добавилось NULL перед единичкой и все
Я прям стесняюсь спросить, а что возвращает функция session_start() true или false - ?
подробнее можно почитать тут: session_start()
P.S. Вот что еще вспомнил, может быть нарушен механизм установки сессий Если перед вызовом функции клиенту уже передавался какой-либо вывод (теги, пустые строки, пробелы, текст и т.п.)
Дополнительно попробуйте setcookie(....) адаптировав под свою версию PHP
- Блин, она не запускается. Как это пофиксить?
- RED2190, P.S. Вот что еще вспомнил, может быть нарушен механизм установки сессий Если перед вызовом функции клиенту уже передавался какой-либо вывод (теги, пустые строки, пробелы, текст и т.п.)
Дополнительно попробуйте setcookie(....) адаптировав под свою версию PHP
Вы успели оставить комментарий, пока я дополнял свой ответ - Daemon23RUS, Господи, была пустая строка перед <?php спасибо большое за помощь! как же глупо...
- RED2190, глупо не это, а то что вы не читаете ошибки, в которых РНР вам прямо строчку указывает, где лишний вывод
- Я прям стесняюсь спросить, а при чем здесь setcookie?
- Ипатьев, у меня не было ошибок, в том то и проблема
- RED2190, верно. в ЭТОМ-то и проблема. В том что ошибки ЕСТЬ, а "у вас" их нету. То есть вы их не видите. А должны. Если это домашний сайт, то ошибки должны выводиться на экран, чтобы вы их видели. А не сидели и гадали, в чем проблема.
Если сайт боевой, то ошибки пишутся в лог. Куда вы первым делом должны смотреть при возникновении любых проблем - Ипатьев, Спасибо
- Ипатьев, 100%, но для новичков по видимому вывод ошибок сродни цитате одного боксера "А сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все. Мало, кто может это делать."
- Ипатьев,
Я прям стесняюсь спросить, а при чем здесь setcookie?
у ТС "черный ящик" что у него с хранением сессий на стороне PHP - вопрос, причина неизвестна. Логи он не видит/не читает. Трафик не видит/не анализирует. А 2й компонент - кука, проверить просто. Как следствие вектор поиска сужается.
- Daemon23RUS, в каком смысле "проверить"? Что именно проверить?
- Ипатьев, Обычно, мы полагаемся на прошлый опыт, я приведу пример реального кейса. За балансиром стоит 4 сервера, которые на php обрабатывают забросы, сессии хранятся в 5м сервере в редисе. Плюс один "чудный" процесс использует редис, а по окончании дропает базу. все хорошо до тех пор пока в конфиге "чудного процесса" номер базы не начинает совпадать с сессионной базой PHP. Не спрашивайте как так вышло, это боль. Так вот в этом кейсе сессионная переменная умирала регулярно без единого сообщения об ошибке.
И ответ, что именно проверить: в проблемной точке кода имеется ли возможность установить куку, т.к сервер уже мог отдать какие то данные. - Daemon23RUS, ну попытается он поставить куку. Она не ставится. Вместо одного черного ящика у него теперь два. Я не понимаю, в чем профит.
- Ипатьев, не ставится по ошибке, решает проблему - профит, не ставится по "религиозным соображениям" ini_set("session.use_trans_sid",true); и в путь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с аннулированием $_SESSION после перезагрузки страницы может иметь несколько причин. Вот некоторые из них и способы их решения:
1. Неправильная настройка сессий:
Убедитесь, что вы вызываете session_start() в начале каждого скрипта, который использует сессии. Это должно быть выполнено до любого вывода на экран, включая пробелы и переносы строк.
```php
```
2. Проблемы с куки:
Убедитесь, что у вас включены куки в вашем браузере. Сессии в PHP по умолчанию используют куки для хранения идентификатора сессии. Если у вас отключены куки, то сессии не будут работать.
3. Не правильный путь каталога сессий:
Проверьте параметр session.save_path в файле php.ini. Убедитесь, что путь каталога сессий существует и доступен для записи.
4. Превышение лимита сессий:
Если ваш сервер достиг лимита файлов сессий, PHP может перестать записывать новые сессии. Увеличьте параметр session.save_path или очистите старые сессии.
5. Проблемы с кешированием:
Если вы используете какие-либо механизмы кеширования на вашем сервере, это может привести к проблемам с сессиями. Убедитесь, что вы правильно настроили кеширование для работы с сессиями.
Если после проверки всех этих возможных причин ваша проблема с аннулированием $_SESSION после перезагрузки страницы все еще остается, попробуйте упростить свой код и убедитесь, что нигде не происходит перезапись $_SESSION сессии.
Надеюсь, что эти советы помогут вам решить проблему с аннулированием $_SESSION после перезагрузки страницы.