我写了一个过去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();
}
?>
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;
?>
班级b.php
<?php
include_once 'includes/functions.php';
sec_session_start();
echo($_SESSION["test"]);
?>
类b.php 的预期输出是&#34;这是一个测试&#34;但实际输出是&#34;&#34;在我的服务器上,由于未知原因,会话数据不是持久的。正如我所说,它在当地完美运作。任何人都有一个线索可能是什么问题?这可能是php.it或我错过的CPanel属性的问题吗?
我注意到在 function.php 中执行了session_start()行后才创建PHPSESSID。
感谢您的帮助!
答案 0 :(得分:1)
在session_start()
的{{1}}上方$secure = SECURE;
。您不应在sec_session_start()
之前定义和分配任何变量。
编辑:实际上尝试将它一步一步地带到上层并以某种方式与其他会话功能一起玩弄。在它之前不使用标题。
修改:请参阅here(第1点)由session_start()
在第二行引起的重大问题,解决得非常简单。