[英]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.