使会话值为空而不是destroy_session()

时间:2014-09-05 14:55:00

标签: php session redirect

下面是我使用SESSION功能的PHP例程。我有三个网页名称login.php,homepage.php,logout.php。 当我在login.php页面输入正确的密码和用户名时,它会将我重定向到homepage.php。在homepage.php中,它包含一个注销链接。当我点击该注销链接时,它将我重定向到login.php。这些功能绝对符合我的期望。但我现在的问题是,当我单独打开homepage.php时,它应该将我重定向到login.php。但它打开了homepage.php。我需要一个确切的条件,homepage.php只能在login.php中提交正确的数据时打开homepage.php。否则,当我直接打开homepage.php时,它应该将我重定向到login.php。但主要的是我不需要销毁会话但我可以将会话值清空为

  

$ _ SESSION ['sumthing'] =='';

希望你理解我的问题。提前谢谢。

登录页面

<?php 
    include("includes/config.php");
    if ($_POST['frmSubmit']) {
        $strUserData = doSelectUserDetails($_POST);
        if($strUserData) {
            $_SESSION['SESS_UserId'] = $strUserData['user_id'];
            $_SESSION['SESS_UserName'] = $strUserData['user_name'];
            session_write_close();
            header('Location: homepage.php');
        } else {
            $strMessage = 'User Name or Password is Incorrect!';                                                                    
            $strClass = 'Error';
        }   
    }

?>

首页

<?php
    include("includes/config.php");
    if((!isset($_SESSION['SESS_UserId'])) || (($_SESSION['SESS_UserId']) == '')) {
        header("location: login.php");
        exit;
    }
?>

注销

<?php
        $_SESSION['SESS_UserName'] == '';
        $_SESSION['SESS_UserId'] == '';
        header("location: login.php");
        exit();
?>

功能

function doSelectUserDetails($objArray)
{
    $sqlSelect = "SELECT * FROM tbl_userdata WHERE user_name = '".$objArray['frmUserName']."' AND user_password = '".$objArray['frmPassword']."' ";
    $strValues = SelectQry($sqlSelect);
    return $strValues[0];
}

3 个答案:

答案 0 :(得分:1)

注意:session_destroy()将重置您的会话,您将丢失所有存储的会话数据。

改为使用unset()函数:

if(isset($_SESSION['views'])) {
unset($_SESSION['SESS_UserName']);
unset($_SESSION['SESS_UserId']);
}

首页文件:

if((!isset($_SESSION['SESS_UserId'])) || (($_SESSION['SESS_UserId']) == '')) {
    header("location: login.php");
    exit;
} else echo $_SESSION['SESS_UserName'];

答案 1 :(得分:1)

取消设置logout.php文件的会话变量,如下所示

  unset($_SESSION['SESS_UserName']);
  unset($_SESSION['SESS_UserId']); 

使用unset从$ _SESSION全局数组中销毁一个会话元素。

如果要销毁当前注册的所有会话变量,请使用session_unset()函数。

答案 2 :(得分:0)

我要做的是检查用户是否有会话。如果他们不重定向到登录页面:

if (session_status() == PHP_SESSION_NONE) {
    header("location: login.php");
}

来源:Check if PHP session has already started