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

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 и переносит пользователя куда надо.

Заранее спасибо
 
зачем гет?
сделай hidden поле в форме авторизации
 
zerkms а передавать адрес страницы на которую пользователь желает попасть каким образом ? Там же идет автоматический редирект. Хидден поле не прокатит.
 
> Хидден поле не прокатит.
Чем?
PS: и base64-то нафига, когда есть urlencode? Кстати REQUEST_URI, наверно, было бы достаточно вместо всей этой канители.
 
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 спасибо, это действительно лучше :)
 
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'])?>">
...
Как-то так.
 
SiMM ну это то понятно, что можно и так на самой странице авторизации. Я имел ввиду передачу адреса с разных страниц на login.php. Как я понял, рекомендуете остановится на GET'е.

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

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

Ага, тогда можно будет еще и POST (если были) сохранять и передавать после правильного логина.
 
почему нельзя тут же ему форму вывести, тут же обработать и тут же отредиректить
Тут же - это на той странице которую он запросил ?
То есть тем же include подключаем страницу авторизации ?
 
ну да.
это же самое простое решение - ничего никуда передавать не надо, поскольку ури у нас остаётся тот жесамый в течение всего процесса. знай - на себя адресуй
 
rotoZOOM
пост теряется при редиректе.
а при том что если юзер сабмитит данные а сессия потерялась то будет обидно :) ну да если у вас там не постят то и нафик
 
denver
а без редиректа, типа, не теряется?
с ручника будем сниматься, или как?
 
Сверху