问题描述
我在index.PHP
的开头按如下所述开始会话
<?PHP
if ( !isset($_SESSION) ) {
ini_set( 'session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/tmp'));
umask(0);
// session_status(); >> 1
session_start();
}
并使用2个类,第一个类设置会话,第二个类读取会话
Login.PHP
<?PHP
class Login
{
public function getUser() {
if ( isset($_POST['username']) && $_POST['username'] === "test" ) {
$_SESSION['current_user'] = "test";
// session_status(); >> 2
?>
{
"status": true
}
<?PHP
} else {
?>
{
"status": false
}
<?PHP
}
通过运行此脚本,将在上述路径中以sess_to43...
的形式创建一个新的会话文件,其中包含current_user|i:test;
到目前为止,我有一个会话文件
Auth.PHP
<?PHP
class Auth
{
public function getSession() {
var_dump($_SESSION);
}
返回NULL
,当我查看服务器上的会话目录时,可以看到新的会话文件为空,这意味着PHP再次运行session_start()
,因此
甚至以为我在开始和两节课之前都使用过session_start()
,PHP无法识别当前存在的会话
此外,如您所见,我为会话文件设置了不同的路径,并且所有新会话都正确存储在此目录中,但是此简单脚本无法处理会话
PHP.ini
中是否有任何原因,或者Apache服务器导致每个新请求的未创建会话都没有建立?
P.S。 PHP版本:7.4
解决方法
您的问题就在这里
echo session_status(); // 1
session_start();
您在开始会话之前将输出发送到浏览器。试试:
$x = session_status(); // 1
session_start();
echo $x;