【发布时间】:2019-12-01 01:36:15
【问题描述】:
我在使用 PHP 的登录系统时遇到问题。我有一个名为 session.php 的文件,我将其包含在另一个名为 index.php 的 PHP 文件中。
这是里面的代码:
<?php
if(session_status() == PHP_SESSION_NONE){
session_start();
}
$user = null;
include 'user.php';
include 'connection.php';
if(isset($_SESSION['myweb-login'])){
$id = $_SESSION['myweb-login'];
$stmt = $db->prepare('SELECT id, username, active_token, verified, wants_verification FROM usuarios WHERE id = ?');
$stmt->execute([$id]);
$userDb = $stmt->fetch(PDO::FETCH_ASSOC);
if(!$userDb){
unset($_SESSION['myweb-login']);
}else{
$user = new User($userDb['id'], $userDb['username'], $userDb['active_token'], $userDb['verified'], $userDb['wants_verification']);
}
}
?>
在我使用 XAMPP 和 PHP 7.3 的机器上运行良好。如果我使用 PHP 7.3(以及)将它上传到 apache 服务器并进入 index.php;
然后我检查$user 的值,它是NULL。
但是,如果我切换到 PHP 7.0,它工作得很好,$user 现在应该是一个对象。
由于与库的兼容性,我需要使用 PHP 7.3。
另外,如果您直接转到 session.php 文件而不是从另一个文件中包含它,它可以正常工作(即使使用 PHP 7.3)。
我试过了:
将
session_start()位放在文件开头的index.php内。使
index.php内容不过是`include '会话。
但一无所获。
另外,我无权访问日志,因此无法在那里查看。
我尝试了 var_dumping 的东西来查看 session.php 文件是否被调用,直到 if(isset($_SESSION['myweb-login'])){ 行它显示东西,但之后什么都没有......
【问题讨论】:
-
听起来您已经回答了自己的问题,因为
if(isset($_SESSION['myweb-login'])){内部没有任何东西在运行。var_dump($_SESSION)的输出是什么? -
不,
var_dump($_SESSION)为 NULL。 -
这样可以缩小范围。
var_dump(session_status())怎么样? -
它返回
int (1)。有趣的是,我从index.php复制了代码,将其复制到另一个文件中,然后它就可以工作了。也许index.php有一些破坏它的元数据?或者某些属性正在被缓存或其他什么? -
也许吧。在 session.php 的 include 语句之后在 index.php 中重复上述所有操作。