美好的一天,
我正在使用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);
?>
谢谢
答案 0 :(得分:4)
从第二页中删除此代码:
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: -
同时确保以下所有要点:
确保session_start();在调用任何会话之前调用。因此,安全的赌注是在开幕后立即将其放在页面的开头
标题重定向后,使用exit()结束当前脚本; (其他人也提出了session_write_close();和session_regenerate_id(true),你也可以尝试这些,但我会使用exit();)
确保在您用于测试的浏览器中启用了Cookie。 确保register_globals处于关闭状态,您可以在php.ini文件中查看,也可以使用phpinfo()。请参阅此有关如何将其关闭的信息。
确保您没有删除或清空会话
确保$ _SESSION超全局数组中的键不会被覆盖
确保您重定向到同一个域。因此,从www.yourdomain.com重定向到yourdomain.com不会带来会议。
确保您的文件扩展名为.php(它会发生!)
有关详细信息,请参阅session_start()