因此,我在自己的网站上制作了一个非常基本的登录系统,并且在使用session_status检查活动会话时遇到了麻烦。这是怎么回事:
我有一个注册页面,该页面同时充当表单(when $_SERVER['REQUEST_METHOD'] != 'POST'
)和将用户添加到数据库的脚本(when $_SERVER['REQUEST_METHOD'] == 'POST'
)。如果一切顺利,并且添加了用户,那么我将执行以下代码:
session_start();
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
header('Location: registration-successful.php');
exit();
我知道我session_start()
不在代码开头,但这没关系,因为程序在session_start()
调用之前不输出任何内容。(实际上,唯一session_start()
可以调用的方法是它从不输出任何东西,因为它紧随其后退出。)
我的registration-successful.php代码如下所示:
<?php
if(session_status() == PHP_SESSION_ACTIVE){
session_start();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Noether Here Nor There - Registration Successful</title>
<link rel="stylesheet" href="css/main.css" type="text/css" />
</head>
<body>
<h1>Congratulations <?php echo "{$_SESSION['username']}" ?>, you were successfully registered!</h1>
<p>Continue on to <a href="index.php">the main site</a>.</p>
</body>
</html>
就目前而言,此代码不起作用。而是打印出“恭喜,您已成功注册”。也就是说,它无法识别$_SESSION
。所以很明显,session_start()
它没有被执行。因此,if语句失败。
但是我不明白为什么。实际上,当我删除if(session_status() == PHP_SESSION_ACTIVE)
并简单地放置时session_start()
,它就可以工作。
但是我需要能够使用,session_status() == PHP_SESSION_ACTIVE
因为在我的主页上,我用它来确定是显示登录屏幕还是用户的主页。
显然,这是可行的-毕竟,如果您未登录,几乎每个网站(例如Facebook)都可以显示其登录页面,如果可以,则可以显示主页。因此,他们必须以某种方式检查活动会话。我会用类似的东西isset($_SESSION[...])
,但是
a)有人告诉我,$_SESSION
在声明之前不能引用变量session_start()
,并且b)session_status函数应该消除了对所有棘手内容的需求。
请问有人对此有所启示吗?我想我开始发疯了。
编辑:这是我的index.php页面的代码(链接到registration-successful.php):
<?php
if(session_status() !== PHP_SESSION_ACTIVE){
$active = FALSE;
} else{
$active = TRUE;
session_start();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Title</title>
<link rel="stylesheet" href="css/main.css" type="text/css" />
</head>
<body>
<h1>Title</h1>
<?php
if(!$active){
?>
<a href="login.php">Log In</a>
<br />
<a href="register.php">Register</a>
<?php
} else {
echo "Welcome " . $_SESSION['username'] . ".";
}
?>
</body>
</html>
编辑#2:谢谢大家,问题解决了。我误解了session_status在做什么以及何时使用它。更新后的代码只是将session_start()放在顶部,然后根据条件“ if(isset($ _ SESSION ['username']))”加载适当的内容。
你可以试试这个吗
<?php
if (session_status() !== PHP_SESSION_ACTIVE) {session_start();}
?>
或者:
<?php
if(session_status() != 2) {session_start();}
// your code
?>
此选项可以正常工作,而不会发出警告。
0 = PHP_SESSION_DISABLED
1 = PHP_SESSION_NONE
2 = PHP_SESSION_ACTIVE
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句