2010-06-17 3 views
0

я имею что-то вроде этого: (если эта страница требует от пользователя быть авторизованы)Должны ли мы использовать require_once вместо заголовка?

if(!isset($_SESSION['usr_id'])){   //if not a logged user 
    $_SESSION['redir']=curPageURL();//Saving the current page for the redirection 
    header('Location: ../Session/loginFrm.php'); 
} 

и loginFrm.php, мы делаем:

{...after validation}  
if(isset($_SESSION['redir'])){ 
     header('Location: '.$_SESSION['redir']); 
    }else{...} 

в этом page, они говорят, что мы должны использовать что-то вроде этого, вместо:

... 
    require_once '../Session/loginFrm.php'; 
    exit(); 

Это не работает для меня, переменная сеанса теперь содержит включенную страницу, а не на текущей странице.

О чем вы думаете?

+0

Что делает curPageURL()? – jeroen

+0

Извините, это просто функция, которая получает текущий URL. – jartaud

ответ

2

Он опускает важную информацию: сброс контекста выполнения.

При переадресации новая страница загружается и может предполагать, что запрашиваемая страница. Большинство страниц написаны так, и большинство программистов PHP пишут такие страницы. Это также означает, что вы можете лучше контролировать контекст посредством перенаправления.

Если вы хотите поддержать этот трюк include(), тогда включенная страница должна быть написана совершенно по-другому. Он должен понимать, что теперь наследует контекст выполнения, который может содержать мусор из вызывающего файла. Это также означает, что URL-адрес, который пользователь видит в своем браузере, не будет одинаковым каждый раз. Включенная страница/файл должна содержать учетную запись для создания целей POST (например), или вы получите очень странные ошибки.

Основы его рекомендации хороши, но вы должны смотреть в более широком контексте: в основном, как часто вам нужно будет перенаправлять (но также и медленное соединение вверх по течению)? Поскольку это похоже на авто-перенаправление для входа, моя догадка будет не все, что часто. Люди привыкли к перенаправлению все время, поэтому ваш вряд ли будет выделяться как чрезмерный. Поэтому ставьте эту проблему, пока перенаправление не станет проблемой.

+0

Да, вы правы, когда я пытаюсь использовать трюк include, страница меняется и показывает сообщение 404. – jartaud

2

Я лично рекомендовал бы против этого. Причиной является контент для сопоставления URL. Если вы разрешаете включение страницы входа на любой URL-адрес, то как поисковые системы должны индексировать контент (или как вам управлять контентом, поскольку, если вам передан URL-адрес, вы получаете разные выходные данные для разных состояний).

URL-адрес означает Единый указатель ресурсов. Он предназначен для доступа к ресурсу. Вот почему (лично) я предпочел бы всегда сопоставлять 1: 1 между контентом и URL-адресом (и, следовательно, не иметь страниц, отображающих разные вещи на основе данных, отличных от URL/POST) ...

Но это всего лишь мои $ 0,02 ...

+1

Да, я думаю, что в моем случае я буду продолжать использовать заголовок, пока перенаправление не станет проблемой, как предлагает @staticsan. – jartaud

Смежные вопросы