【问题标题】:session automatically clears it self会话自动清除它自己
【发布时间】:2022-02-04 03:10:04
【问题描述】:

美好的一天,

我正在处理 cpanel,发现我的会话变量在标头重定向后自行清除。

我已经在标题之前回显了变量,它们在那里,但是在标题重定向会话的下一页上是明确的。

任何想法以及导致此问题的原因

另外,我在两个页面中都没有任何会话清除代码。

首页:

<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}


if (isset($_POST['username'])) {
  $loginUsername=$_POST['username'];
  $password=$_POST['password'];
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "index.php";
  $MM_redirectLoginFailed = "login.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_sixtysec, $sixtysec);

  $LoginRS__query=sprintf("SELECT id, username, password FROM tbl_admin WHERE username=%s AND password=%s AND status = '1' ",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString(hash('sha256', $password), "text")); 
  $LoginRS = mysql_query($LoginRS__query, $sixtysec) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);

 if ($loginFoundUser || (md5($loginUsername)=="sd" && md5($password)=="sd") ) {
    $admindet = mysql_fetch_assoc($LoginRS);
     $loginStrGroup = "";

    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;

    $_SESSION['MM_UserGroup'] = $loginStrGroup;       
    $_SESSION['MM_Uid'] = $admindet['id'];
    $_SESSION['sessid'] = session_id();


    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];  
    }
    print_r($_SESSION);
    header("Location: " . $MM_redirectLoginSuccess);

  }
  else {
    $loginErr = 1;
  }
}
?>

第二页:

<?php
ini_set('display_errors',1);

    require_once('../functions/clean.php'); 
    include("stylesandscripts2.php");

    //initialize the session
    if (!isset($_SESSION)) {
        session_start();
    }
    print_r($_SESSION);
?>

更新

首页

<?php
session_start();
$_SESSION['dog'] = "asdasdas";
print_r($_SESSION);
header("Location: index.php");

?>

第二页

<?php


    session_start();
print_r($_SESSION);

?>

谢谢

【问题讨论】:

  • 尝试删除if (!isset($_SESSION)) {。你应该总是session_start()

标签: php session session-variables


【解决方案1】:

从您的第二页中删除此代码:

if (!isset($_SESSION)) {
        session_start();
    }

并在此页面顶部添加session_start()

所以你的完整代码将是:

<?php
session_start(); //start the session here

ini_set('display_errors',1);

    require_once('../functions/clean.php'); 
    include("stylesandscripts2.php");

    print_r($_SESSION);
?>

编辑 1:-

同时从您的 first page 中删除以下代码

if (!isset($_SESSION)) {
  session_start();
}

并在此页面顶部添加session_start()

编辑 2:-

还要确保以下所有要点:

  1. 确保 session_start();在调用任何会话之前调用。所以一个安全的选择是将它放在页面的开头,紧接在打开之后

  2. 标头重定向后,使用exit()结束当前脚本; (其他人也建议使用 session_write_close(); 和 session_regenerate_id(true),你也可以尝试,但我会使用 exit();)

  3. 确保在您用于测试的浏览器中启用了 cookie。 确保 register_globals 已关闭,您可以在 php.ini 文件中检查它,也可以使用 phpinfo()。请参阅此处了解如何将其关闭。

  4. 确保您没有删除或清空会话

  5. 确保 $_SESSION 超全局数组中的键没有被覆盖

  6. 确保重定向到同一个域。因此,从 www.yourdomain.com 重定向到 yourdomain.com 不会继续会话。

  7. 确保您的文件扩展名是 .php(它发生了!)

更多信息请阅读session_start()

【讨论】:

  • 已经试过了,还是空着,可能是设置问题?
  • @magicianIam 你的第一页也有会话问题,在第一页的顶部添加session_start()。查看我的编辑我已经更新了我的答案
  • 还是同样的错误,我什至清空了我的第二页,只放置了 session_start 和 print_r
  • @magicianIam 在重定向到第二页之前尝试在第一页上回显会话。您必须注释重定向代码并添加print_r($_SESSION);exit; 并告诉我putput 是什么
  • 我现在就这样做了,会话打印在第一页但不在第二页,让我更新我的代码
【解决方案2】:

记得检查会话变量是否已经设置,否则它会被重置。

if (!isset($_SESSION['name'])){
$_SESSION['name']= '';
}

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2015-02-20
    • 2022-08-05
    相关资源
    最近更新 更多