Page has Expired И session_start();
Раньше было так
1. жму submit в своей странице search.php
2. загружается search.php с какой-то инфой
3. далее ухожу на любую страницу
4. Жму кнопку назад - все ОК
Потом в это файле search.php включил сессии (session_start();)
И стало так:
1. жму submit в своей странице search.php
2. загружается search.php с какой-то инфой
3. далее ухожу на любую страницу
4. Жму кнопку назад - выодится страница:
"Warning: Page has Expired The page you requested was created using information you submitted in a form. This page is no longer available.........click the Refresh button."
Собственно вопрос - причина этого, почему при включении сессий началась такая лабуда. И главное как этого избежать?
Ты пытаешься еще раз отправить форму. Вот тебе и говорит IE(по-видимому), что нажми F5 - и он ее отправит еще раз. Именно по этому на форумах часто используют страницы, которые пишут типа "Вы были авторизированны, сейчас перейдем куда-нибудь". Там используют функцию JS document.location.replace(), которая перезаписывает в истории страницу от формы, так что ее повторно уже отправить не получится
И я еще нен совсем понял про document.location.replace(), как мне ее использовать в моем случае, чтобы избежать такой проблемы?
document.location.replace(URL) - подставляет в хистори URL вместо текущего адреса с параметрами, а также подгружает страничку по URL.
Вот прикладываю пример.
Если убрать session_start, то возврат по кнопке назад работает хорошо.
По совету Dolonet (спасибо:)) поставил в форме тип передачи данных GET - и правда возврат работать стал корректно. Одна проблема - у меня в форме очень много данных (ну очень много очень очень много) и не хочется передавать весь этот хлам в адресной строке. Может кто посоветует как избежать данной проблемы используя POST?
Тут написано:
Цитата:
session_start() will register internal output handler for URL rewriting when trans-sid is enabled. If a user uses ob_gzhandler or like with ob_start(), the order of output handler is important for proper output. For example, user must register ob_gzhandler before session start.
. Думаю, дело как раз в headers, которые отправляются или не отпрваляются в сессии и, соответственно, переписывают или не переписывают стандартные.
session.use_cookies = 1
session.name = PHPSESSID
остальные закоментарены (помимо необходимых конечно))
PS Жмакать на кнопку GOGO надо дважды!
надо вставить перед session_start();
Но вообще рекомендую не использовать сессии PHP, а наваять несложные свои. Хотя, некоторые со мной могут не согласиться.
Свои сессии? Это как? Просто передавать какие-то свои переменные от страницы к странице?
пользоваться COOKIES, написать обработчик хитов, но свой. Туда и статистику свою подключить можно легко. Ну это так, на любителя. Я люблю сам контролировать пользователя и его путешествия по сайту.
А если куки не работают?
Сессия по умолчанию нужна там, где человек делает какой-то выбор, что-то надо запомнить ЧЕЛОВЕКУ. В таких местах можно предупредить, что у человека выключены куки, а это нехорошо.
Да и по статистике нынче у всех они включены по умолчанию.