为了账号安全,请及时绑定邮箱和手机立即绑定

PHP $-SESSION 变量在新页面上消失并返回空

PHP $-SESSION 变量在新页面上消失并返回空

PHP
汪汪一只猫 2021-06-29 13:56:23
我遇到了会话变量的问题。自从我从 mysqli 切换到 PDO。它在 mysqli 上运行良好,但自从我切换到 PDO 后,这个问题就出现了。我正在尝试登录,我有一个区域,我想确保用户只能看到,如果用户登录。登录工作正常,但是一旦我被引用到我的索引文件,我由于登录功能,什么也看不到。我可以看到 $_SESSION 变量被填满,但是一旦我重定向到另一个文件,$_SESSION 变量就会消失,我得到一个空数组:Array()process_login.phprequire_once('../inc/user.inc.php'); // here i have all my functions  $user = new User(); // New Instance of my User Class  $user -> sec_session(); // selfmade session function. I use start_session() in this function  if (isset($_POST['email'], $_POST['p'])) {      $email = filter_var($_POST['email'], FILTER_SANITIZE_STRING);      $password = filter_var ($_POST['p'], FILTER_SANITIZE_STRING);       $login = $user -> login_user($email, $password);       if ($login) {          // Login sucessful          //print("<pre>".print_r($_SESSION,true)."</pre>"); //Here i get my $_SESSION variable printed out and it works. I see it is filled.          header('Location: ../index.php');          exit();      }索引.php<?php    $title = 'Index';    $currentPage = 'Dashboard';    include('php/head.php');    require_once('../inc/user.inc.php');    $user = new User();    $user -> sec_session(); // here i call my session function again. Note: session_start() is included in this function    print("<pre>".print_r($_SESSION,true)."</pre>"); //Now The Array is empty?!??>user.inc.php - sec_session 函数protected function sec_session() {            $session_name = 'sec_session_id';             $secure = SECURE;            $httponly = true;            if (ini_set('session.use_only_cookies', 1) === FALSE) {            header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");            exit();            }以上工作一切正常,但只会消失,当我登陆我的 index.php 并且我知道有一些东西时,但我不知道它是什么。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您是使用 http 还是 https 来访问您的本地站点?如果您使用安全 cookie,PHP 不会在 http 下读取它们,而是使用新 cookie 启动新会话,切换到 https 可以解决此问题。

从您的 sec_session 函数看起来您正在使用安全 cookie ($secure = SECURE;) 那么您的浏览器会话是否使用 HTTPS?如果您使用带有安全 cookie 的 HTTP,您将在每个页面上启动一个新会话,并且无法访问现有会话变量。

最好的解决方案是使用 https 访问您的本地站点,就像您访问实时站点一样,但如果您关闭本地站点的安全 cookie 设置,它也将起作用。


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 228 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信