2015-01-07 3 views
1

У меня есть несколько страниц на моем сайте, большинство из которых являются только страницами-членами, к которым у пользователя должен быть доступ только один раз.перенаправить на страницу индекса входа, если пользователь не вошел в систему?

Когда пользователь приземляется на моей странице, они автоматически приземляются на индекс/домашнюю страницу (index.php). Если пользователь попытался перейти к dashboard.php, который предназначен только для участников, то они должны быть перенаправлены обратно на index.php, чтобы они могли войти.

в верхней части всех моих страниц-членов, таких как dashboard.php и manage_account.php я в том числе header.php файл, например так:

include 'header.php'; 

когда пользователь регистрируется в я создать сеанс «$ _SESSION [» пользователь «]»

И я использую следующие перенаправить заголовок, чтобы проверить, существует ли сеанс, и если он не перенаправляет этого пользователя.

<?php 
session_start(); 
include 'config.php'; 

if (empty($_SESSION['user'])) { 
    header('Location: index.php'); 
    exit; 
} 

?> 

Моя проблема, а не вырезать и вставить код заголовка перенаправления на каждую страницу участника Я просто хочу, чтобы поместить его на странице header.php, как это в настоящее время включено во всех моих страницах членов, включая мой главная страница index.php.

однако он создает непрерывный редирект и не загружает страницу, он говорит, что веб-

+0

я лично 'если ($ users-> isLogged) { кнопки дисплея и т. Д. } else { // показать логин или ничего о себе? } ' – Izopi4a

+0

Почему бы не извлечь необходимый код функции (например,' обеспечитьUserIsLoggedIn() ') и вызвать эту функцию, это намного чище, чем включение файла заголовка с исполняемым кодом. Написание класса, который обрабатывает эту проблему, позволит перенаправить на исходную страницу после входа в систему. – martinstoeckli

+0

@martinstoeckli Извините, я действительно новичок в php, есть способ, которым вы могли бы показать мне, как вы имеете в виду? спасибо –

ответ

-1

Вы перенаправлять index.php в index.php - если файл доступ index.php ваше Перенаправление не должно быть уволено.

<?php 
session_start(); 
include 'config.php'; 

$basename = substr(strtolower(basename($_SERVER['PHP_SELF'])),0,strlen(basename($_SERVER['PHP_SELF']))-4); 


if ((empty($_SESSION['user'])) && ($basename!="index")) { 
header('Location: index.php'); 
exit; 
} 
?> 
+0

с использованием PHP_SELF - это действительно плохая идея и риск для безопасности. – Forien

+0

@Forien в отношении риска безопасности, а затем вокруг php self есть способ сделать этот код более безопасным, поскольку он кажется единственной резолюцией, которая работает в настоящее время? –

+0

@JamesDaley 'SCRIPT_FILENAME' может быть? Или, по крайней мере, выполнить 'htmlspecialchars ($ _ SERVER [" PHP_SELF "], ENT_QUOTES," utf-8 ")' на PHP_SELF, чтобы снять его с возможного кода XSS – Forien

0

В страницах членов сделать:

$memberOnly = true; 
include 'header.php'; 

и в header.php:

if (isset($memberOnly)) { 
    if (empty($_SESSION['user'])) { 
     header('Location: index.php'); 
     exit; 
    } 
} 

В общедоступных страницах (не являющихся членами) вы просто:

include 'header.php' 

, не беспокоясь о $memberOnly

3

Возможно, потому что заголовок включен также в индекс, не так ли? Вы можете проверить, что при условии, перед перенаправлением:

<?php 
session_start(); 
include 'config.php'; 

if (empty($_SESSION['user']) && parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) != '/index.php') { 
    header('Location: index.php'); 
    exit; 
} 

?> 
+0

Да, это правильно. index.php также включает 'header.php'; но когда я пробую ваш код, он говорит то же самое, что веб-страница не может быть отображена, потому что она имеет цикл перенаправления –

+0

Downvoted, потому что если uri содержит переменные GET, он все равно будет делать перенаправления. – Forien

+0

Да, хороший момент, исправлено. –

2

Вы можете установить массив в файл config.php, с которой страницы нужно быть проверить и сравнить с текущей страницы, чтобы определить, если будет проверять.

Например:

$member_pages = array('dashboard', 'member-page', 'etc'); 

$current = $_SERVER['REQUEST_URI']; 
if (empty($_SESSION['user']) && array_search($current, $member_pages) !== FALSE) { 
    header('Location: index.php'); 
    exit; 

}

Надеется, что это помогает!

-1

Добавить эту проверку непосредственно перед перенаправлением

if ($_SERVER["PHP_SELF" ] != "index.php") 
0

Если я понимаю вашу проблему правильно, ваш файл header.php включен в каждой странице. Хотя этот заголовок.PHP-файл содержит код, который выполняется:

header.php:

<?php 
// This code is executed whenever you include this file 
session_start(); 
include 'config.php'; 

if (empty($_SESSION['user'])) { 
    header('Location: index.php'); 
    exit; 
} 
?> 

Вы получаете петлю переадресации, что означает, что этот код также выполняется в index.php странице. Возможно, файл header.php также включен в файл index.php.

Если вы извлечете код функции и назовите ее только на страницах, для которых требуется зарегистрированный пользователь, вы избежите этого цикла.

header.php:

<?php 
// The code in this function is not called automatically when the file is included 
function redirectToLoginIfNecessary() 
{ 
    if (!isset($_SESSION['user'])) { 
    header('Location: index.php'); 
    exit; 
    } 
} 
?> 

index.php:

<?php 
session_start(); 
include 'header.php'; 
// Public accessible pages do not call the function 
... 
?> 

secret.php:

<?php 
session_start(); 
include 'header.php'; 
// Protected pages do call the function 
redirectToLoginIfNecessary(); 
... 
?> 
Смежные вопросы

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