簡體   English   中英

PHP會話 - 用戶登錄后未存儲

[英]PHP Sessions - User not stored after 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");
?>

您錯過了dologin.php頂部的session_start()。 在任何輸出開始之前,需要在每頁的頂部。

沒有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'])) { ?>

你可能想要

<?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']應為空。 在這種情況下,他們會收到消息“您已經登錄”。 而不是登錄表單,但由於沒有表單,沒有什么可以檢查,所以沒有辦法登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM