我有一个带有登录表单的索引页面,一个名为 login 和content的验证页面。
索引相当简单:如果登录,则重定向到Content,否则将显示登录表单并将其发送到 login 页面
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 } ?>然后进行Login验证:将POST vars与编码变量进行比较,如果一切正常,设置会话变量并重定向到content。
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 } ?>该过程工作,直到内容页。我一直得到一个空白的会话数组,当我尝试索引时,它假装我从未登录过。我遗漏了什么?!
编辑:在上面的代码中,content.php试图检查会话是否设置。如果没有设置它,它将显示一个空数组(为了调试目的,但通常我希望它回到索引,因为用户没有正确连接),
如果它被设置,它将响应“您已登录”。它还包括一个名为“logoff.html”的页面,因为该页面有一个按钮来销毁会话。
即使没有IF语句,运行一个print_r ($_SESSION);也会返回一个空数组。这意味着IF语句中没有问题,而是在它之前发生的事情。
解决方案:我以前不知道这一点,但是有些托管站点需要设置一些PHP,然后才能存储PHP会话。我到托管服务的知识库中搜索“会话”,并找到了关于如何设置php.ini文件以将会话保存在正确路径上的说明。
发布于 2014-02-15 12:06:13
确保会话配置正确。例如,会话保存处理程序是否正确设置?如果使用文件,它是否有访问指定文件夹的权限?如果是memcache,设置正确吗?
这将是会话变量不被保存的主要原因。
发布于 2014-02-15 12:13:24
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 } ?>https://stackoverflow.com/questions/21797255
复制相似问题