PHP会话 - 用户没有登录后登录
问题描述:
我正在我的网站上建立一个基本的密码保护区,我有一个登录表单。PHP会话 - 用户没有登录后登录
<!-- login.php -->
<?php
session_start();
?>
<?php if(!empty($_SESSION['user'])) { ?>
<form>
<input type="text" name="username" />
<input type = "password" name = "password" />
<input type="submit" value = "login" />
<input type="hidden" name="token" value="KdasS2wFgw24F7hh" />
</form>
<?php } else { ?>
You are already logged in.
<? } ?>
<!-- dologin.php -->
<?php
$allowed = //sql checking db
if($allowed > 0) {
$_SESSION['user'] = $row['user_id'];
}
header("Location: login.php");
?>
答
您错过了dologin.php
顶部的session_start()。在任何输出开始之前,需要在每页的顶部。
没有session_start();
您将无法访问创建或更新会话变量(在你的情况$ _SESSION [ '用户'])
session_start()
:http://php.net/manual/en/function.session-start.php
同样 - 另一个有用的提示:
我注意到你没有得到你的header();
之后的exit();
你需要这个,这样如果用户刷新login.php af之三登录浏览器不会重新提交发布数据dologin.php
同样 - 另一个有用的提示:
你有
<?php if(!empty($_SESSION['user'])) { ?>
你可能想
<?php if(empty($_SESSION['user'])) { ?> // No `!`
如果没有$ _SESSION ['user'],您将希望显示登录表单
所以你的最终代码应该是这样的:
<!-- login.php -->
<?php
session_start();
?>
<?php if(empty($_SESSION['user'])) { ?>
<form>
<input type="text" name="username" />
<input type = "password" name = "password" />
<input type="submit" value = "login" />
<input type="hidden" name="token" value="KdasS2wFgw24F7hh" />
</form>
<?php } else { ?>
You are already logged in.
<? } ?>
<!-- dologin.php -->
<?php
session_start();
$allowed = //sql checking db
if($allowed > 0) {
$_SESSION['user'] = $row['user_id'];
}
header("Location: login.php");
exit();
?>
答
你检查if (!empty($_SESSION['user']))
,但他们已经登录之前,$_SESSION['user']
应该是空的。在这种情况下,他们会收到消息“您已经登录”。而不是登录表单,但由于没有表单,因此无法检查,因此无法登录。