2015-01-06 2 views
-1

У меня проблемы с моим кодом. Как-то оператор if, который проверяет сеансы, всегда возвращает true. Даже при старте. Я не могу понять, почему ..Почему эта сессия всегда возвращает true?

Вот моя страница входа.

<?php 
session_start(); 
if(isset($_SESSION['username'])) //<-----This always returns true here for a strange reason. 
{ 
} 
?> 

Вот мой мой контроллер входа.

if($_POST) 
{ 
    if(isset($_POST['submit']) AND $_POST['submit'] == "login") 
    { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     try 
     { 
      include '../model/Login.php'; 
      $login = new Login($username, $password); 

      if($login == TRUE) 
      { 
       session_start(); 
       $_SESSION['username'] = $username; 
       header("Location:../index.php"); 
      } 

     } 
     catch (Exception $exc) 
     { 
      echo $exc->getMessage(); 
     } 
    } 
} 
+2

'var_dump ($ _ SESSION ['username'])' для определения того, что она содержит. Затем проследите, почему он содержит его. – deceze

+0

if (isset ($ _ SESSION ['username']) &&! Empty ($ _ SESSION ['username'])) –

+2

@Manish 'isset &&! Empty' является излишним бессмысленным, просто используйте'! Empty', если вам нужно использовать это вообще. – deceze

ответ

0

Это всегда возвращает истину, потому что даже если $ _SESSION [ 'имя пользователя'] пусто (== ''), он установлен.

Для отмены установки, вы можете использовать:

unset($_SESSION['username']); 

или

session_destroy(); 

если вы просто хотите, чтобы проверить, если он пуст, есть:

if(!empty($_SESSION['username'])){}//Will return false if $_SESSION['username'] == '' 

или даже

if($_SESSION['username'] != ''){}//Will return true if $_SESSION['username'] has a value (other than '') 

PS: преимущество пустого() заключается в том, что оно также проверит, будет ли переменная isset()

+0

Это не объясняет, почему это верно в начале приложения, когда никаких взаимодействий не было сделано. Я уже знаю о session_destroy(). Мне просто интересно, почему сеанс устанавливается автоматически с самого начала. –

+0

, если вы находитесь в локальной среде, вы могли бы использовать одну и ту же переменную $ _SESSION на другом сайте. Но если вы на сервере, действительно, это странно. Кроме того, если ваш сервер установил длительный срок службы сеанса. – Roshyo

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