2012-01-24 63 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回說,「登錄爲:管理員」

但當我點擊鏈接獲取登錄頁面,或註冊頁面再次從索引頁面,我應該得到相同的消息,「記錄爲...」,但該會話似乎被關閉,而不是。 :(

這裏的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(); 
?> 

我回來的時候使用上述「返回」到索引頁面的鏈接,它顯示登錄爲... 但是當我回到這裏再次,事實並非如此。

所以我想我會被自動銷燬?但是爲什麼呢?

謝謝,我感謝您的幫助。

我忘了說ŧ帽子的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

謝謝大家,我已經知道了形式行動
'form method =「post」action =「<?php unset($ _ SESSION ['login'])..'問題:PHP解釋器每次都會將會話數組中存儲的「登錄」值取消設置,非常感謝!我生氣了! – 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之下的 以查看是否有任何錯誤消息回顯給您。 在你的PHP.ini中 session.cookie_lifetime = 0 意味着只要瀏覽器保持打開狀態,會話就保持活動狀態。它只在瀏覽器關閉時被破壞。 我希望這可以幫助