2014-01-19 2 views
0

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

Код размещен ниже.

  • Форма:

    <form action="login_system.php" method="post"> 
    Username<br> 
    <input type="text" name="username"><br> 
    Password<br> 
    <input type="password" name="password"><br> 
    <input type="submit" name="submit" value="login"> 
    </form> 
    
  • login_system.php:

    error_reporting(E_ALL^E_NOTICE); 
    
    $user = $_POST['username']; 
    $pass = $_POST['password']; 
    
    if (isset($_POST['submit']) && $user == 'test' && $pass == 'test') { 
        session_start(); 
        $_SESSION['logged_in'] == 'yes'; 
        if ($_SESSION['logged_in'] == true) { 
         echo '<META HTTP-EQUIV="Refresh" Content="0; URL=main_index.php">'; 
        } 
    } 
    
  • Страница для входа:

    session_start(); 
    require('login_system.php'); 
    
    
    if ($_SESSION['logged_in'] == 'true') { 
        echo 'ok'; 
    } else { 
        die ('You do not have permission to view this webpage.'); 
    } 
    

ответ

0

сеанс вызывается на странице входа. Попробуйте удалить его, и он должен исправить вашу проблему.

0

session_start() должен быть в верхней части каждой страницы, на которой вы используете сеансы. На вашей странице «Login_system» это не так. Он должен выглядеть следующим образом:

session_start(); 
error_reporting(E_ALL^E_NOTICE); 

$user = $_POST['username']; 
$pass = $_POST['password']; 

if (isset($_POST['submit']) && $user == 'test' && $pass == 'test') { 
    $_SESSION['logged_in'] = 'yes'; 
    if ($_SESSION['logged_in'] == true) { 
     echo '<META HTTP-EQUIV="Refresh" Content="0; URL=main_index.php">'; 
    } 
} 

Кроме того,

$_SESSION['logged_in'] == 'yes'; 

должен иметь только один знак равенства:

$_SESSION['logged_in'] = 'yes'; 

Два равных знаков оператор сравнения. Вы хотите тот, который является оператором присваивания.

+0

Можете ли вы пройти над 'error_reporting'? –

+0

Да. Он может идти над ним. –

+0

'Примечание: сеанс уже запущен - игнорируется session_start()', и я все еще получаю сообщение об ошибке. –

0

У вас есть следующее, что является оператором сравнения. Оператор присваивания просто =

$_SESSION['logged_in'] == 'yes'; 
        ^
if ($_SESSION['logged_in'] == true) {#you can probably remove this line 

Какой должна быть

$_SESSION['logged_in'] = 'yes';# or true? 

Тогда у вас есть 'true', которые на самом деле 'yes' или, если вы не ищете == true, а не строки true

if($_SESSION['logged_in'] == 'true') { 

Какие должен быть одним из следующих, но убедитесь, что вы согласны

if($_SESSION['logged_in'] == 'yes') { 

ИЛИ

if($_SESSION['logged_in'] == true) { 
Смежные вопросы