Не знал как назвать тему иначе, но поясню всё сдесь И так допустим есть обработчик с формой при нажатии на кнопку Выход он перекидывает нас допустим в logout.php где у нас PHP: <?php @ob_start(); session_start(); session_destroy(); ... Да всё супер выкидывает из сессии но остаётся в файле http://......./logout.php при помощи header можно задать путь куда угодно.. Но меня интересует как сделать путь, на какой страничке я нажал выход на той он и сделал бы. Допустим я зашёл ав раздел новостей надоела сидеть под лгином нажал ны выход и там же остался и т.д. п.с. Форма логина находиться в навигации.. п.с.с. Кто может рассказать разницу между @session_start(); и session_start();
PHP: <?php // Code header('Location '.$_SERVER['HTTP_REFFERER']); ?> Оператор @ подавляет вывод ошибок.
при данном коде н обновляет тогда файл logout.php он у меня пустой и покаывает белый экран Любая страница при нажатии ВЫХОД -> logout.php -> страница где нажал выход тока уже без сессии. при session_star() меня на постояне ругается что чё та ам ну ошибка хотя пробелов нету и символов тоже.. а когда @session_star() всё ок может дело в кодировке у меня стоит UTF-8 без BOM.
PHP: <?php if(isset($_SERVER['HTTP_REFERER'])){ header('Location '.$_SERVER['HTTP_REFERER']); }else{ header('Location xxxxxx'); // xxxx - страница, куда перебросить } ?> Переадресовывает именно на ту страницу, с который пришел пользователь. НО: если вы не запускаете logout.php напрямую, в противном случае срабатывает вторая инструкция.
ну как вариант - а зачем вообще делать логаут где-то на другой странице, если его можно сделать на той которой мы находимся... Самый простой вариант добавить к урлу еще одну GET переменную типа http://..../url.php?l=1 и в хедере поставить проверку if (isset($_GET['l'])) session_destroy(); юзер останется на той же странице только уже без сессии. Фактически это просто релоад страницы.
что то не выходит всёравно пусто Да вариант неплохой. Я делал что например на кнопке выход <a href='?l=1'>выход</a> при нажатии урл менялся но что бы достичь другой формы(форма входа логина) надо сделать обновление страницы, как можно было бы это одновременно сделаь ? Что бы нажать на выход занеслось в урл считал удалил обновил. что бы в урл красивше было без всяких ? и т.д.
Не читал всех сообщений и может быть окажусь не в теме. На HTTP_REFFERER полагаться вообще нельзя. На мой взгляд, единственный выход - сессия, в которую записывается ссылка на текущую страницу.
Ну пы сейчас, например, на viewtopic.php?t=18580 - записываем это значение в сессию, и следующая страница знает куда возвращаться... Есть еще вариант - в ссылку на log out дописываем ?wayback= и безопасно для URL'а закодированный адрес текущей страницы (или с параметрами ?file=<current_file> и список всех GET'овских аргументов через &). Безопасно и сработает у всех, даже с выключенными куками. А HTTP_REFFERER нам может прислать все что угодно, например, сообщение о том, что мы идиоты.
Чего то я на ночь глядя плохо сооброжаю.. допустим если есть такое PHP: <input type=hidden name=input value=out ><input type=submit name=submit value=Logout> //кнопка выхода if ($_POST['input']=='out') { session_destroy(); } всё срабатывает также как и с вариантом PHP: <a href='?l=1'>exit</a> if (isset($_GET['l'])) { session_destroy(); } Но блин надо дополнительное обновление или переход куда на другую страницу что бы пропала форма авторизированого юзера на форму с вводом узера и пасса через хедер просто выкинуть на главную страницу тоже не хочется как то по тупому выйдет чёрт.
ну а чем плохо дополнительное обновление.... дешево и сердито... а так еще на javascript прийдется примочки писать... а смысл?
test1.php PHP: <?php echo ('<a href = "test2.php?wayback=' . urlencode ($_SERVER ['PHP_SELF']) . '">Logout</a>'); ?> test2.php PHP: <?php header ('Location: ' . urldecode ($_GET ['wayback'])); ?>
T-Mon Ура, этот код работает но у меня сразу же возникла другая проблема, по поводу новостей при входе в новость они у в урл так выглядят /news/news_view.php?id=12 и при выходе на этой страничке он ругается. ДА чего то я не обратил внимание на это дело Исправим