gpt4 book ai didi

php - $_SESSION 没有设置?

转载 作者:行者123 更新时间:2023-11-30 23:49:12 26 4
gpt4 key购买 nike

我正在为一家小公司开发一款供内部使用的简单应用。我很难让帐户登录正常工作,我相信这与 $_SESSION 没有像我预期的那样设置有关。现在我对 PHP 还很陌生,并且一直在学习。

index.php 包含这个:

<?php
session_start();


require_once('includes/config.inc.php');
require_once('includes/functions.inc.php');


// Check login status -- if not logged in, redirect to login screen
if (check_login_status() == false) {
redirect('login.php');
}

所以当我加载应用程序时,我被重定向到 login.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-    strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">


<head>
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
<title>Login Page</title>
<link rel="stylesheet" type="text/css" href="css/login.css" />
</head>
<body>
<form id="login-form" method="post" action="includes/login.inc.php">
<fieldset>
<legend>Login to Inventory System</legend>
<p>Please enter your username and password to access the Inventory system</p>
<label for="username">
<input type="text" name="username" id="username" />Username:
</label>
<label for="password">
<input type="password" name="password" id="password" />Password:
</label>
<label>
<input type="submit" name="submit" id="submit" value="Login" />
</label>
</fieldset>
</form>
</body>


</html>

当我在登录页面点击提交时,includes/login.inc.php 被调用:

<?php
session_start();


require_once('config.inc.php');
require_once('functions.inc.php');


// Escape any unsafe characters before querying database
$username = $con->real_escape_string($_POST['username']);
$password = $con->real_escape_string($_POST['password']);


// Construct SQL statement for query & execute
$query = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . MD5 ($password) . "'";
$result = mysqli_query($con,$query) or die(mysqli_error($con));


// If one row is returned, username and password are valid
if (is_object($result) && $result->num_rows == 1) {
$_SESSION['logged_in'] = true;
redirect('../index.php');
} else {
redirect('../login.php');
}
?>

现在我已经能够确定登录已成功处理,因为如果我禁用 index.php 中的 check_login_status 函数,如果我使用有效帐户登录,我将被重定向到 index.php。在相同的条件下,错误的密码将重新加载 login.php。在禁用该功能的情况下,我还尝试在 index.php 的顶部添加“print_r($_SESSION)”,但没有加载任何内容,这让我觉得我的功能有问题。

函数.inc.php:

<?php
function redirect($page) {
header('Location: ' . $page);
exit();
}


function check_login_status() {
// IF $_SESSION['logged_in'] is set, return the status
if (isset($_SESSION['logged_in'])) {
return $_SESSION['logged_in'];
}
return false;
}
?>
config.inc.php:

<?php
$con=mysqli_connect("server_name","user","pass","db_name");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

我真是一头雾水,不知道问题出在哪里。我用“php -l file.php”检查了语法错误,没有发现语法错误。我不确定如何用它进行任何其他调试,或者我遗漏了什么。非常感谢您的帮助!

代码块可能有点偏离。 是的,我知道不推荐使用 MD5 密码,一旦我可以在我的应用程序中使用该功能,它将更改为使用 salt。一旦登录部分正常工作,我还将转义/准备所有 MySQL 查询。

最佳答案

这不会解决您的问题,但会简化您的 check_login_status 功能。

function check_login_status() {
return (isset($_SESSION['logged_in']) && $_SESSION['logged_in']===true);
}

您的 session 变量也没有被设置,因为 cookie 没有被浏览器存储。您的 header() 函数会覆盖其他已设置的 header 。

很多人使用session_write_close();作为修复。在重定向之前添加它。

参见:https://bugs.php.net/bug.php?id=14636

<?php
session_start();


require_once('config.inc.php');
require_once('functions.inc.php');


// Escape any unsafe characters before querying database
$username = $con->real_escape_string($_POST['username']);
$password = $con->real_escape_string($_POST['password']);


// Construct SQL statement for query & execute
$query = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . MD5 ($password) . "'";
$result = mysqli_query($con,$query) or die(mysqli_error($con));


// If one row is returned, username and password are valid
if (is_object($result) && $result->num_rows == 1) {
$_SESSION['logged_in'] = true;
session_write_close();
redirect('../index.php');
} else {
redirect('../login.php');
}
?>

关于php - $_SESSION 没有设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20847929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com