2013-04-16 4 views
0

У меня проблема с PHP и сеансами. Это мой код для словаря.php.PHP Session Issue

<?php 
if(!isset($_SESSION['auth'])){ 
$_SESSION['auth'] = 0; 
} 
if($_SESSION['auth'] == 0){ 
header("Location: index.php"); 
} 
?> 

Итак, есть index.php, который должен установить сеанс «авторизацию» 0 или 1:

<?php 
    $msg = ""; 

//Password handler 
if(!isset($_POST['password'])){ 
    $password = ""; 
}else{ 
    $password = $_POST['password']; 
} 

if(!isset($_SESSION['auth'])){ 
    $_SESSION['auth'] = 0; 
} 

//Username handler 
if(!isset($_POST['username'])){ 
    $username = ""; 
}else{ 
     $username = $_POST['username']; 
    if($username == "potato" && $password == "poteto"){ 
     $_SESSION['auth'] = 1; 
     header("Location: dictionary.php"); 
    }else{ 
     $msg = "<br /> 
<font color=\"#FF0000\">Invalid username or password!</font><br />"; 
    } 
} 

if($_SESSION['auth'] == 0){ 
     header("Location: dictionary.php"); 
} 

?> 

(Выше может быть плохой практикой или что-то, но я просто делаю это для школьного проекта, и я не хочу, чтобы кто-то, чтобы посмотреть файл dictionary.php.)

index.php использует форму с помощью метода POST для отправки $username и $password, только в случае, если у вас нет» t заметил еще.

Когда я ввожу данные для входа в систему, «картофель» и «poteto», он перенаправляет меня на dictionary.php, но затем сразу же бросает меня обратно в index.php. Я пробовал настроить этот код, но не повезло.

Если кому-то понадобится, чтобы показать это им, тогда я могу указать URL-адрес.

Спасибо.

+3

Я не вижу 'session_start()' в любом месте. Исправьте это в первую очередь. Читайте: http://php.net/manual/en/session.examples.basic.php –

+0

«Ошибка 310 (net :: ERR_TOO_MANY_REDIRECTS): было слишком много перенаправлений». – Raymonf

+0

@RBLXDev: Вы создали цикл перенаправления. Это менее тривиально для устранения неполадок, но что это помогает, вам не нужно снимать его сейчас. – hakre

ответ

2

Как указано в комментарии, установите session_start(). Также ...

В index.php в конце концов вы перенаправлять dictionary.php:

if($_SESSION['auth'] == 0){ 
     header("Location: dictionary.php"); 
} 

В dictionary.php для тех же условиях, вы перенаправлять на index.php:

if($_SESSION['auth'] == 0){ 
    header("Location: index.php"); 
} 

Поэтому, когда ваш пользователь находится в ситуации, когда $_SESSION['auth'] == 0, это вызовет бесконечное перенаправление. Вам нужно это очистить.

+0

Спасибо! Так вот в чем проблема? Я перенаправляю дважды? – Raymonf

0

Вы должны сделать вашу функциональность перенаправлять немного более удобным:

function site_redirect($location) 
{ 
    $headers = true; // set to false to disable for troubleshooting 

    $headers = $header && !headers_sent(); 
    if ($headers) { 
     header("Location: $location"); 
    } 
    printf(
     "<html><h1>Moved</h1><a href="%s">Moved to %1\$s</a></html>", 
     htmlspecialchars($location) 
    ); 
    exit(); 
} 

Это не только даст лучшее перенаправить ответное сообщение, она также позволяет (для отладки), чтобы отключить header(...); линии (например, комментируя это), чтобы ваш браузер больше не входил в цикл перенаправления.

Просто замените вызовы, как

header("Location: dictionary.php"); 

с

site_redirect ("dictionary.php");

так, что есть только один header() вызова больше во всем вашем сценарии и что внутриsite_redirect() функции, так что вы можете влиять на переадресацию в центральном месте.