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']应该是空的。在这种情况下,他们会收到消息“您已经登录”。而不是登录表单,但由于没有表单,因此无法检查,因此无法登录。