2012-01-24 5 views
2

У меня проблема с обработкой сеанса php, которую я не могу объяснить себе. Я изучаю php с нуля, и я не могу понять, как вести сеанс в прямом эфире:Обработка сессии в PHP 5

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

Код:

Index 

    <?php session_start(); ?> 

    <a href="register.php" target="_self"> Register </a> 

    <a href="login.php" target="_self"> Login </a> 


<?php 

if(isset($_SESSION['login'])) 
    { 
     echo "Logged as: ".$_SESSION['nlogin']; 

?> 
    <form method="post" action="<?php unset($_SESSION['login']) ?>"> 
    <input type="button" name="logOut" value="LogOut" /> 
    </form> 

<?php 
    } 
    else 
    { 
    echo "Please Register or Login"; 
    } 
    ?> 

на самом деле эта работа, потому что, когда я вернулся из login.php он говорит, «Записан как: Admin»

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

вот login.php:

<?php 


session_start(); 

include "dbConnect.php"; 

if(isset($_SESSION['login'])) 
    { 
     echo "Logged as: ".$_SESSION['nlogin']; // IT NEVER SHOW THIS MESSAGE 
    } 

if(isset($_POST['submit']) &&(trim($_POST['submit']) == "Login")) 
    { 
     if(!isset($_POST['user']) || $_POST['user']=="") 
     { 
      echo "Attenzione inserire l'username."; 
     } 
     elseif(!isset($_POST['pwd'])||$_POST['pwd']=="") 
     { 
      echo "Attenzione inserire la password."; 
     } 
     else 
     { 
      $u = trim(filter_var($_POST['user'], FILTER_SANITIZE_STRING)); 
      $u = str_replace(" ","_",$u); 
      $p = trim(filter_var($_POST['pwd'], FILTER_SANITIZE_STRING)); 
      $p = sha1($p); 

      $istance = new dbHandle; 
      $istance->connect(); 
      $data = $istance->query("SELECT * FROM login WHERE username_login = '$u' AND password_login = '$p'"); 
      if(mysql_num_rows($data) == 0) 
      { 
       echo "Failed"; 


       echo "<a href='index.php' target='_self'> Go Back </a>"; 
      } 
      else 
      { 
       echo "Logged"; 
       $res = $istance->getdata($data); 
       $_SESSION['login'] = $res->id_login; 
       $_SESSION['nlogin'] = $res->username_login; 



       echo "<a href='index.php' target='_self'> Go Back </a>"; 

      } 
     } 
    } 
    else 
    { 
    ?> 
     Login 


     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
      ... 
        <input name="user" type="text" size="20" required="required"/> 
      ... 
        <input name="pwd" type="password" size="20" required="required"/> 
      ... 
        <input type="submit" name="submit" value="Login"/> 
     </form> 


     <form method="post" action="<?php unset($_SESSION['login']) ?>"> 
     <input type="button" name="logOut" value="LogOut" /> 
     </form> 

    <?php 
    } 
    $istance->disconnect(); 
?> 

Когда я вернусь, используя ссылку выше «Go Back» на индексной странице, он показывает, как ... Записан , но когда я вернусь сюда снова , это не делает.

Так я предполагаю, что мой сеанс были уничтожены автоматически? но почему?

Спасибо, я ценю вашу помощь.

Я забыл сказать, т шляпа php.ini имеет

session.cookie_lifetime

установлен в "0"

Благодаря

ответ

3

Вы звоните unset($_SESSION['login']) много раз. Он снимает свой логин:

<form method="post" action="<?php unset($_SESSION['login']) ?>"> 

Попробуйте это:

<form method="post" action="index.php"> 
<input type="button" name="logOut" value="LogOut" /> 
</form> 

<? if (isset($_REQUEST['logOut'])){ session_destroy(); } ?> 
+1

Спасибо всем, я понял, что форма action
'form method =" post "action =" Ivan

+1

Приятно слышать. Вы знаете, что вы должны принять один из ответов, и вы можете поддержать ответы, которые вам нравятся Это будет мотивировать пользователей, чтобы помочь вам и другим;) – PiTheNumber

+0

Я не могу упрекать прямо сейчас, так как больше репутации, все еще далеко впереди !, но спасибо, в любом случае! – Ivan

0

Вы проверить на if(isset($_SESSION['login'])). Если это приводит к true, вы <form method="post" action="<?php unset($_SESSION['login']) ?>">

Обратите внимание на unset($_SESSION['login']) часть - после того, if(isset($_SESSION['login'])) вернется false.

0

Обзор сессии:

<?php 
// Always Start our session 
session_start(); 

$_SESSION['username'] = 'Saurabh Singh'; 

$username = $_SESSION['username']; 

echo $username; 

if(isset($_SESSION['username'])) 
{ 
    Do your action 
} 
else 
{ 
    echo "Please Register or Login"; 

}

1

незадана сеанс, как показано ниже

if(isset($_REQUEST['logOut'])) 
{ 
    unset($_SESSION['login']); 
} 
0

Я не думаю, что сессия была уничтожена! Я бы начал с первого удаления всех пустых строк между открывающими тегами для php и session_start(). Проверьте его снова, и вы можете добавить строку error_reporting (E_ALL); ниже session_start, чтобы узнать, возвращены ли какие-либо сообщения об ошибках (ed). В вашем PHP.ini то, что session.cookie_lifetime = 0 означает, что сеанс остается активным, пока браузер остается открытым. Он уничтожается только при закрытии браузера. Надеюсь, это поможет