如果用戶已登錄$_SESSION['user_active'] = true;但在登錄后會話實際上回傳 false(或根本不存在)。很感謝任何形式的幫助。有人知道出了什么問題嗎?
編輯 1:如果我洗掉與 $_SESSION['user_active']
編輯 2:也添加session_start()了login.class.php,但沒有改進。
HTML 表單由 以下人員處理login.class.php :
<form id="loginForm" class="form" action="acc/login.class.php" method="POST">
<div class="form-group">
<label for="loginUsername" class="form-label">Username</label>
<input id="loginUsername" class="form-control" type="text" name="username" placeholder="Username"><br> <!-- Username -->
</div>
<div class="form-group">
<label for="loginPassword" class="form-label">Password</label>
<input id="loginPassword" class="form-control" type="password" name="password" placeholder="Password"> <!-- Password -->
<div class="form-text"><p> </p></div>
</div>
<div class="form-group">
<button id="loginSendform" class="btn btn-primary" type="submit">
Inloggen
<span class="bi-lock-fill"></span>
<span class="bi-unlock-fill"></span>
</button>
</div>
</form>
在 login.class.php 會話中應回傳“true”:
<?php
session_start();
// Required files
require_once( $_SERVER['DOCUMENT_ROOT'] . '/app/config.php' );
require_once( DIR_ROOT . '/system/db/database.class.php' );
require_once( DIR_ROOT . '/system/db/queries.class.php' );
class Login extends Queries {
// Queries extends database
public function userLogin($postForm) {
// Validate user data
if (isset($postForm['username']) && !empty($postForm['username'])) { # Username
$username = filter_var($postForm['username'], FILTER_SANITIZE_STRING);
} else {
$username = null;
}
if (isset($postForm['password']) && !empty($postForm['password'])) { # Password
$password = md5($postForm['password']);
} else {
$password = null;
}
// Process login
$login = "SELECT * FROM users WHERE username='$username' AND userpass='$password'";
$result = mysqli_query($this->con, $login)
or die (mysqli_connect_errno()."Could not connect to database");
// Convert to array
while ($row = mysqli_fetch_assoc($result)) {
$array[] = $row;
}
$rows = $result->num_rows;
// Check if user exists
if ($rows == 1) {
$_SESSION['user_active'] = true;
$_SESSION['firstname'] = $row['firstname'];
header('location: ../calendar.php');
} else {
$_SESSION['user_active'] = false;
// Store error
$_SESSION['register_error'] = "Username or password is incorrect";
header('location: ../login.php');
}
}
// Logout user
public function userLogout() {
$_SESSION['user_active'] = false;
}
} # End class
$newLogin = new Login;
$newLogin->userLogin($_POST);
如果登錄成功:重定向到 calendar.php 上面有這個的:
<?php
session_start();
// If login or register login is succesful: Clean up session variables
unset($_SERVER['register_error'], $_SERVER['register_success']);
if (isset($_SERVER['user_active']) && $_SERVER['user_active'] == true) {
echo "Success"; return false; # Logged in
} else {
echo "Error"; return false; # Not logged in
}
$filename = "calendar";
$pagename = "Welcome";
require_once( '../config.php' );
require_once( DIR_ROOT . '/system/com/header.inc.php' );
require_once( DIR_ROOT . '/user/com/sidebar.inc.php');
?>
config.php只包含一些define()陳述句。
下一頁不斷回傳,echo "Error";而不是echo "Success";因此登錄會話變數不是真的,或者它甚至不存在。登錄頁面和下一頁是目前唯一使用此變數的頁面。為什么這不起作用?
uj5u.com熱心網友回復:
您還需要在login.class.php檔案中啟動會話。
session_start();在login.class.php檔案的頂部添加。
我現在明白了。session_start();在login.class.php檔案的頂部包含
問題出在
if (isset($_SERVER['user_active']) && $_SERVER['user_active'] == true) {
echo "Success"; return false; # Logged in
} else {
echo "Error"; return false; # Not logged in
}
你看你用的$_SERVER['user_active'],應該是$_SESSION['user_active']
您需要使用$_SESSION來訪問會話變數。$_SERVER是別的東西
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334601.html
上一篇:更新多索引資料框中的值
