2016-02-17 2 views
1

У меня вопрос о сеансах в php. Я сделал страницу входа в систему, и всякий раз, когда я ее пробовал, он просто дал мне ошибку переадресации. Поэтому я ответил на вопрос this.PHP Session lost/login not working

Итак, вместо того, чтобы получать ошибку переадресации, всякий раз, когда я нажимаю кнопку входа, ничего не происходит, форма опорожняется, и это все. Что я делаю не так? Это в настоящее время, как выглядит код, который дает мне проблемы.

index.php:

<?phpsession_start(); 
if (isset($_SESSION['valid_user'])) { 

Header("Location: index.php"); 
exit(); 
} 
if (isset($_POST['submit'])) { 
$name = $_POST['name']; 
$password = $_POST['password']; 

$file = file_get_contents("data.txt"); 
if (strstr($file, "$name||$password")) { 


    $_SESSION["valid_user"] = $_POST["name"]; 
    $_SESSION["valid_time"] = time(); 


    Header("Location: welcome.php"); 


} elseif (empty($name) && empty($password)) { 

    echo "Both fields are empty. Please fill them."; 
} elseif (empty($name)) { 

    echo "No name was entered."; 
} elseif (empty($password)) { 

    echo "No password was entered"; 
} else { 

    echo "Wrong credentials, please try again."; 
} 
} 

Чтобы быть более конкретным код, который я думаю, что проблема эта часть:

<?phpsession_start(); 
if (isset($_SESSION['valid_user'])) { 

Header("Location: index.php"); 
exit(); 
} 

Но всякий раз, когда я пытаюсь это я либо получаю ошибку переадресации:

  • Мой браузер дает мне "ERR_TOO_MANY_REDIRECTS", когда я пытаюсь войти на страницу.

или на странице просто опустошается форма, и ничего больше не происходит. И сообщения об ошибках, которые должны отображаться, когда я не набираю ничего в форме, также не отображаются. Это давало мне головные боли целый день сегодня, поэтому, если бы кто-нибудь мог просто указать мне в правильном направлении, это было бы здорово.

Также форма HTML я использую в index.php:

<body> 
    <form method="post" action="index.php" > 
     <p>Enter name:</p> 
     <input type="text" name="name" /> 
     <br/> 
     <br/> 
     <p>Enter password:</p> 
     <input type="password" name="password" /> 
     <br/> 
     <br/> 
     <input type="submit" value="Login" name="submit"/> 
    </form> 
</body> 
+0

Целесообразно использовать @session_start() –

+0

Ваш код действительно нравится? '

+0

Да, это действительно ' Redbird27

ответ

3

Я думаю, что есть слишком много ошибок, связанных с кодом. Между открывающим тегом PHP и должно быть session_start();.

Плюс, условное заявление, которое вы указали в if (isset($_SESSION['valid_user'])), интерпретируется как «если оно установлено». То, что вы должны были использовать, это оператор !, то есть если он «НЕ» установлен.

Вот почему вы получаете «слишком много перенаправлений».

<?php session_start();// try putting space between here 
if (!isset($_SESSION['valid_user'])) { 

header("Location: login.php"); // Redirect back to your login page 
exit(); 
} 

также в } elseif (empty($name) && empty($password)) { // all elseif должен быть как else if(condition)

также изменить имена файлов.

После каждого заголовка вы должны добавить exit;, иначе ваш код захочет продолжить выполнение.

Проблема возникает, когда у вас есть действительный пользователь, тогда вы пытаетесь перенаправить его на index.php, который снова проверяет действительного пользователя и снова перенаправляет на index.php его как цикл INFINITE.

Thanx @ Fred-II-

+0

Добавление пространства дает мне ошибку переадресации. – Redbird27

+0

Вы можете показать здесь ошибку переадресации? –

+0

см. Обновленный код –

0

Вы получили ответ на свой вопрос, но вот объяснение о «Слишком много переадресаций». Вы получаете эту ошибку в своем браузере, потому что ваш код перенаправляется на другую страницу. Оба ваши заявления возвращаются верно:

if (isset($_SESSION['valid_user'])) { 
} //Returning true - Redirect to index 

if (strstr($file, "$name||$password")) { 
} //Returning true - Redirect to welcome 

Как есть/не было выхода после редиректов, код осуществляет выполнение: перенаправление здесь чем перенаправлять туда ...

Также следует проверить проверку сеанса следующим образом:

if(!isset($_SESSION['session']) || $_SESSION[''] == "") 

Это будет проверять, если сеанс не установлен или пустой.