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

Liz*_*ard 2 php forms session login

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

<!-- 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");
?>
Run Code Online (Sandbox Code Playgroud)

Liz*_*ard 9

你错过了你的顶部的session_start()dologin.php.在任何输出开始之前,需要在每页的顶部.

没有session_start();你将无权创建或更新会话变量(在你的情况下$ _SESSION ['user'])

session_start():http://php.net/manual/en/function.session-start.php

另外 - 另一个有用的提示:

我注意到,你没有一个exit();你之后header();你需要这一点,以便在用户登录后刷新login.php中的浏览器不会重新提交发布数据dologin.php

另外 - 另一个有用的提示:

你有

<?php if(!empty($_SESSION['user'])) { ?>
Run Code Online (Sandbox Code Playgroud)

你可能想要

<?php if(empty($_SESSION['user'])) { ?> // No `!`
Run Code Online (Sandbox Code Playgroud)

如果没有$ _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();
?>
Run Code Online (Sandbox Code Playgroud)