【问题标题】:Making empty the sesssion value rather than destroy_session()使会话值清空而不是销毁会话()
【发布时间】:2014-09-05 14:54:59
【问题描述】:

下面是我使用 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];
}

【问题讨论】:

    标签: php session redirect


    【解决方案1】:

    像这样为 logout.php 文件取消设置会话变量

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

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

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

    【讨论】:

      【解决方案2】:

      注意: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'];
      

      【讨论】:

      • 对不起兄弟,我没听懂你。我应该在哪里使用这个rotine? if(isset($_SESSION['views'])) { unset($_SESSION['SESS_UserName']);未设置($_SESSION['SESS_UserId']); }
      • 这是结束 A 会话的另一种方式
      【解决方案3】:

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

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

      来源:Check if PHP session has already started

      【讨论】:

      • 人们可以在不登录的情况下进行会话。例如去亚马逊,开始购物,然后登录购买。
      猜你喜欢
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多