会话自动清除它自己


session automatically clears it self

大家好,

我在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();
    }

并在此页面顶部添加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. 的开头之后。
  3. 在标头重定向之后,使用exit()结束当前脚本;(也有人建议session_write_close();和session_regenerate_id(true),您也可以尝试这些,但我会使用exit();)

  4. 确保在您用来测试它的浏览器中启用了cookie。确保register_globals是关闭的,您可以在php.ini文件中检查,也可以使用phpinfo()。

  5. 确保你没有删除或清空会话

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

  7. 确保重定向到相同的域。因此,从www.yourdomain.com重定向到yourdomain.com不会使会话继续。

  8. 确保你的文件扩展名是。php(这是真的!)

更多信息

session_start ()

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

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