【问题标题】:PHP session variable not working in two pagesPHP会话变量在两个页面中不起作用
【发布时间】:2023-03-13 11:31:01
【问题描述】:

这是我的第一页。我只是无法让我的变量进入下一页 index.php ($_SESSION['admin_email'])。变量赋值在第一页上工作正常,在 index.php 中它总是重定向到 login.php

<?php 
error_reporting(0);
session_start();
include_once('../_inc/_class/Users.php');
$dbUsers = new Users();
$uname = htmlspecialchars($_POST['username']);
$upass =  md5($_POST['password']);
if($uname != "" && $upass != "") {
   $user = $dbUsers->selectAll("`password` = '".$upass."' and `email` = '".$uname."' and user_type = 'admin'", "1", "");
    /*print_r($user);*/
    if(!empty($user) && $user[0]->email == $uname && $user[0]->password == $upass) {
        $_SESSION['admin_email'] = $user[0]->email;

        /*var_dump($_SESSION['admin_email']);*/
    }   
    else {
        $_SESSION = array();        
        session_destroy();      
    }

}
die(header('Location:../index.php'));
?>

index.php

<?php
error_reporting(E_ALL);
session_start();

if(!isset($_SESSION['admin_email'])) {
    die(header('Location:./login.php'));
}

?>

【问题讨论】:

  • 在新页面上,做一个print_r($_SESSION);以了解更多信息
  • 您确定您没有在 if 语句的 else 部分意外使用 session_destroy() 吗?
  • 您确定您的登录脚本没有通过 if 的 else 部分吗?尝试在 else 中放置一个 die()....
  • print_r($_SESSION);它返回一个空数组
  • 登录脚本没有通过 else 部分。

标签: php session session-variables


【解决方案1】:

从您的代码看来,login.php 位于子文件夹中,而不是位于 index.php 所在的根文件夹中。

您正在从子文件夹设置会话值,如果您的 php.ini 设置或包含的类 (Users.php) 中的某些 session_set_cookie_params() 故意为该子文件夹设置会话路径,它将使会话变量在外部无法访问那个。

所以尝试添加session_set_cookie_params 并将$path 参数设置为/

然后它将可用于根文件夹和其中的所有子文件夹。

更多信息请查看session_set_cookie_params

【讨论】:

    【解决方案2】:

    使用

    if(!session_id()) session_start();
    

    而不是使用普通的

    session_start();
    

    【讨论】:

    • 正确查看 OP 的代码。 OP 可能正在执行session_destroy 语句。给出解决方案前请确认
    • @JP Kim 请避免给出单行答案,您可以在评论框中发布,因此请使用评论框进行此类回答
    猜你喜欢
    • 2017-08-26
    • 2013-03-21
    • 2013-10-09
    • 2013-11-10
    • 2015-09-30
    • 2012-08-17
    • 2014-05-16
    相关资源
    最近更新 更多