会话变量不再持久
我写了一个在过去3个月里一直工作的代码。 现在突然间,我发现我的PHP _Session变量不再在我登录的不同页面之间持续存在。 请注意,代码实际上适用于本地,但不适用于我的服务器(papahost)。
下面是我想要做的一个非常简单的版本(SESSION从A到B):
class function.php
<?php
function sec_session_start()
{
//other code goes here
session_name('sec_session_id');
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
if (ini_set('session.use_only_cookies', 1) === FALSE)
{
header("Location: ../error.php?err=8");
session (ini_set)
exit();
}
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"], $secure, $httponly);
//end of other code
session_start();
}
?>
class a.php
<?php
include_once 'function.php';
sec_session_start();
$_SESSION["test"] = "this is a test";
$url = "b.php";
echo '<script type="text/javascript">';
echo 'window.location.href="'.$url.'";';
echo '</script>';
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
echo '</noscript>';
exit;
?>
class b.php
<?php
include_once 'includes/functions.php';
sec_session_start();
echo($_SESSION["test"]);
?>
类b.php的预期输出是“这是一个测试”,但实际的输出是“”在我的服务器上,因为由于未知原因,会话数据不是持久的。 正如我所说,它在当地完美运作。 任何人都有线索可能是什么问题? 这可能是来自php.it或我错过的CPanel属性的问题吗?
我注意到,在session.start()函数在function.php中执行后没有创建PHPSESSID。
感谢您的帮助!
将session_start()
通过$secure = SECURE;
在sec_session_start()
。 你不应该在session_start()
之前定义和分配任何变量。
编辑:实际上试着把它一步一步地带到上一层,并以某种方式与其他会话功能结合起来。 在它之前不使用标题。
编辑:看到这里(第1点)由第二行session_start()
引起的大问题,解决非常简单。