簡體   English   中英

PHP 5中的會話處理

[英]Session Handling in PHP 5

我在php會話處理方面遇到問題,我無法向自己解釋。 我正在從頭開始研究php,但我不知道如何保持會話狀態:

這是我的索引頁面,用戶可以在其中訪問右側頁面登錄或注冊數據庫,然后返回查看是否已登錄:

碼:

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返回時,它說:“登錄為:管理員”

但是,當我單擊鏈接以獲取登錄頁面或從索引頁面再次注冊頁面時,我應該收到相同的消息“ Logged as ...”,但會話似乎已關閉。 :(

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

當我使用“返回”上方的鏈接回到索引頁面時,它顯示Logged as ...,但是當我再次回到此處時,它沒有。

所以我認為我的會話被自動銷毀了嗎? 但為什么?

謝謝,謝謝您的幫助。

我忘了說PHP.ini

session.cookie_lifetime

設置為“ 0”

謝謝

您多次調用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(); } ?>

如下所示取消會話

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

您檢查if(isset($_SESSION['login'])) 如果結果為true ,則執行<form method="post" action="<?php unset($_SESSION['login']) ?>">

注意unset($_SESSION['login'])部分-之后, if(isset($_SESSION['login']))將返回false

會議概述:

<?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";

}

我認為會議沒有被破壞! 我首先要刪除php和session_start()的開始標記之間的所有空行。 再次測試,您可以添加行error_reporting(E_ALL); 在session_start下面,查看是否有任何錯誤消息回顯給您。 在您的PHP.ini中,session.cookie_lifetime = 0表示只要瀏覽器保持打開狀態,會話就保持活動狀態。 僅在關閉瀏覽器時銷毀它。 我希望這有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM