PHP会话-用户登录后未存储

PHP会话-用户登录后未存储,php,forms,login,session,Php,Forms,Login,Session,我正在我的网站上建立一个基本的密码保护区,我有一个登录表单 <!-- login.php --> <?php session_start(); ?> <?php if(!empty($_SESSION['user'])) { ?> <form> <input type="text" name="username" /> <input type = "password" name = "password" />

我正在我的网站上建立一个基本的密码保护区,我有一个登录表单

<!-- 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
顶部的会话_start()。在开始任何输出之前,需要在每一页的顶部添加该选项

没有
session_start()您将无权创建或更新会话变量(在您的情况下为$\u session['user'])

会话\u启动()

另一个有用的提示:

我注意到您没有
exit()
标题()之后
您将需要这样做,以便如果用户在登录后刷新login.php,浏览器不会将发布的数据重新提交到dologin.php

另一个有用的提示:

你有

<?php if(!empty($_SESSION['user'])) { ?>

你可能想要

<?php if(empty($_SESSION['user'])) { ?> // No `!`
//不``
如果没有$\u会话['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();
?>

您已登录。
您正在检查
是否(!empty($\u SESSION['user'])
,但在他们登录之前,
$\u SESSION['user']
应为空。在这种情况下,他们会收到消息“您已经登录了”,而不是登录表单,但由于没有表单,因此没有要检查的内容,因此无法登录