Перемещение на запрошенную страницу после авторизации

rotoZOOM

ACM maniac
Перемещение на запрошенную страницу после авторизации

Доброе время суток !

Есть такая задача:
сайт имеют право просматривать только зарегистрированные пользователи.
Когда один зарегистрированный пользователь кидает ссылку на определенную область этого
сайта другому зарегистрованному пользователю, то чтобы эту область отобразить необходимо
произвести авторизацию второго пользователя.
Таким образом введя в строку браузера:
www.mysite.ru/new/foto/homyachki.php?showthumb=true
его естественно перемещают на страницу авторизации
www.mysite.ru/login

Так вот ... после авторизации хорошо бы его перенести на запрашиваемую страницу.
То есть запомнить ее, авторизовать пользователя, перенести.

Посоветуйте как лучше это сделать.
Стоит ли использовать сессию ?

Каким образом это сейчас реализовано у меня:
При попадании неавторизованного пользователя на любую страницу,
запоминается ее (страницы) относительный путь + параметры, после чего кодирую эту строку
base64 и передаю GET запросом на страницу авторизации
(base64_encode($_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']))
, которая после логина декодирует url и переносит пользователя куда надо.

Заранее спасибо
 

zerkms

TDD infected
Команда форума
зачем гет?
сделай hidden поле в форме авторизации
 

rotoZOOM

ACM maniac
zerkms а передавать адрес страницы на которую пользователь желает попасть каким образом ? Там же идет автоматический редирект. Хидден поле не прокатит.
 

SiMM

Новичок
> Хидден поле не прокатит.
Чем?
PS: и base64-то нафига, когда есть urlencode? Кстати REQUEST_URI, наверно, было бы достаточно вместо всей этой канители.
 

rotoZOOM

ACM maniac
SiMM Как чем ? Хорошо, может я неправильно объяснил.
Страница: /a.php
PHP:
if (!isset($_SESSION['uid'])){
    header ("Location: login.php");
    die;
}
А на странице login.php мне необходимо знать куда вернуться после авторизации.
Откуда login.php будет знать куда вернуться ?
Причем тут hidden поле ?

-~{}~ 21.06.06 09:55:

P.S. насчет REQUEST_URI спасибо, это действительно лучше :)
 

SiMM

Новичок
PHP:
// a.php
...
header('Location: login.php?'.SID.'&ret='.urlencode($_SERVER['REQUEST_URI']));
...
PHP:
<?php // login.php
if (пользователь залогинился с правильным паролем) {
  ...
  header('Location: '.$_POST['ret'].'&'.SID);
  die();
}
?>
<form method="POST">
<input type="hidden" name="ret" value="<?=urlencode($_REQUEST['ret'])?>">
...
Как-то так.
 

rotoZOOM

ACM maniac
SiMM ну это то понятно, что можно и так на самой странице авторизации. Я имел ввиду передачу адреса с разных страниц на login.php. Как я понял, рекомендуете остановится на GET'е.

Спасибо, за советы.
 

HraKK

Мудак
Команда форума
Так же можно попробовать редиректить на login.php
и анализировать реферер после авторизации.
 

Фанат

oncle terrible
Команда форума
я только не понял, зачем пользователя куда-то кидать.
почему нельзя тут же ему форму вывести, тут же обработать и тут же отредиректить. всё время с одним и тем же реквест урием.
 

SiMM

Новичок
> и анализировать реферер после авторизации.
Сколько раз можно повторять - REFERER - необязательный заголовок, и если вы не хотите потом разбираться, почему у "малограмотного" в компьютерном плане человека всё работает не так, как вы ожидали - полагаться на его присутствие и достоверность (к примеру, там может оказаться домен файрвола) - не стоит.

> всё время с одним и тем же реквест урием.
Тоже вариант.
 

denver

?>Скриптер
> всё время с одним и тем же реквест урием.

Ага, тогда можно будет еще и POST (если были) сохранять и передавать после правильного логина.
 

rotoZOOM

ACM maniac
почему нельзя тут же ему форму вывести, тут же обработать и тут же отредиректить
Тут же - это на той странице которую он запросил ?
То есть тем же include подключаем страницу авторизации ?
 

Фанат

oncle terrible
Команда форума
ну да.
это же самое простое решение - ничего никуда передавать не надо, поскольку ури у нас остаётся тот жесамый в течение всего процесса. знай - на себя адресуй
 

denver

?>Скриптер
rotoZOOM
пост теряется при редиректе.
а при том что если юзер сабмитит данные а сессия потерялась то будет обидно :) ну да если у вас там не постят то и нафик
 

Фанат

oncle terrible
Команда форума
denver
а без редиректа, типа, не теряется?
с ручника будем сниматься, или как?
 
Сверху