我有一个索引页面,其中包含登录表单,一个名为登录和内容的验证页面。
索引非常简单:如果已登录,则会重定向到内容,否则会显示登录表单并将POST发送到登录页面
的index.php:
<?php
session_start();
if(isset($_SESSION['usr']) && isset($_SESSION['pswd'])){
header('Location: content.php');
} else {
?>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> PHP Login </title>
</head>
<body>
<center>
<form method="POST" action="login.php">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="usr"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="pswd"></td>
</tr>
<tr>
<td><input type="submit" name="login" value="Login"></td>
<td><input type="reset" name="reset" value="Reset"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
<?php } ?>
然后我们有登录验证:将POST变量与编码变量进行比较,如果一切正常,请设置会话变量并重定向到内容。
的login.php:
<?php
session_start();
if($_POST['usr']=='user' && $_POST['pswd']=='password'){
$_SESSION['usr'] = 'user';
$_SESSION['pswd'] = 'password';
header('Location: content.php');
} else {
echo "post: ";
print_r ($_POST);
//header('Location: index.php');
}
?>
然后我们有内容页面,检查会话是否设置并显示内容,否则PRINT_R
content.php:
<?php
session_start();
if(!isset($_SESSION['usr']) || !isset($_SESSION['pswd'])){
// header('Location: index.php');
echo "session: ";
print_r ($_SESSION);
} else {
include 'logoff.html';
?>
You are logged in!!!
<?php } ?>
此过程适用于“内容”页面。我一直得到一个空白的SESSION数组,当我尝试去索引时,它假装我从未登录过。我错过了什么?!
编辑:在上面的代码中,content.php正在尝试检查会话是否已设置。如果未设置,它将显示一个空白数组(出于调试目的,但通常我希望它返回索引,因为用户未正确连接),
如果设置,它将回显“您已登录”。它还包括一个名为“logoff.html”的页面,因为该页面有一个用于销毁会话的按钮。
即使没有IF语句,只需运行print_r ($_SESSION);
即可返回空白数组。这意味着IF语句中没有问题,但在它之前发生了一些问题。
解决方案:之前我不知道这一点,但是一些托管网站需要一些PHP设置才能存储PHP会话。我去了托管服务的知识库并搜索了“会话”,并找到了如何设置 php.ini 文件以将会话保存在正确路径中的解释。
答案 0 :(得分:1)
确保正确配置会话。例如,会话保存处理程序是否设置正确?如果使用文件,是否有权访问指定的文件夹?如果是memcache,那是否设置正确?
这是会话变量无法保存的主要原因。
答案 1 :(得分:-3)
change this
<?php
session_start();
if(!isset($_SESSION['usr']) || !isset($_SESSION['pswd'])){
// header('Location: index.php');
echo "session: ";
print_r ($_SESSION);
} else {
include 'logoff.html';
?>
You are logged in!!!
<?php } ?>
i think in your code when session not set then it will print so change it with
<?php
session_start();
if(isset($_SESSION['usr']) && isset($_SESSION['pswd']))
{
// session is set
// header('Location: index.php');
echo "session: ";
print_r ($_SESSION);
}
else
{
/// session is not set
include 'logoff.html';
?>
You are logged in!!!
<?php } ?>