我试图通过一个示例创建一个登录表单。我成功了,但我不明白。
为什么需要$_SESSION['umsco']
,为什么要为其分配$username
变量。我也不清楚是否需要conn->close()
以及$result
变量是什么。
// I include the database file so we can get the information from there and apply it in here as well.
include "dbc.php";
// here we select the variables we want from the table 'members'.
$sql = "SELECT id, firstName, lastName FROM members";
// here we do something that I dont really know but this is standard procedure.
$result = mysqli_query($conn, $sql);
// declaring username
$username = $_POST["username"];
$password = $_POST["password"];
// my result thing, again, standard procedure.
$result = $conn->query($sql);
// we insert all values in row, standard procedure.
$row = $result->fetch_assoc();
// here we check if the username is the same as the database.
if ($username == $row["firstName"]) {
// if it's correct then we start a session
session_start();
// we give a session some random letters or numbers and set it to $username, not exactly sure why, but it wont work without it.
$_SESSION['umsco'] = $username;
// we change the location to secrect.php
header("location: secret.php");
}
// we close the connection, not sure if this is needed, but it seems logical.
$conn->close();
答案 0 :(得分:2)
我建议您在代码的开头始终实施 session_start()
,以避免不良行为。
要了解,您必须了解什么是 PHP会话。
会话是一种为当前用户在网站的所有页面上保留变量的方法。
首先,您必须要求PHP初始化会话。为此,必须在代码的开头添加session_start()
。
服务器响应客户端时,会附加一个名为PHPSESSID
的cookie,其中包含用户的唯一会话标识符。
在每次请求时,浏览器都会将此cookie发送到服务器,以便php可以从服务器的硬盘中恢复会话。
注册会话变量的最常用方法是$_SESSION['key'] = $value;
。
最后,第$_SESSION['umsco'] = $username;
行将用户的用户名存储在其会话中,直到。
session_destroy()
破坏php.ini
中定义的会话expire after a time 在secret.php
中,您可能检查该值是否已分配,或者是否存在会话以检查用户是否已登录。这就是强制性原因,否则,登录表单将没有任何意义。
答案 1 :(得分:0)
结果就是下次您致电
session_start();
$loggedUserName = $_SESSION['umsco'];
您将在需要的地方为您提供该用户(用户名)。
只需阅读SESSION的基础知识,您就应该能够理解。
答案 2 :(得分:0)
首先,您需要查询用户名和密码与$ _POST数据匹配的成员。
第二,在两次请求之间可以使用$ _SESSION变量中存储的任何内容。通常,您要“记住”用户ID或类似名称,因此您无需提交用户名/密码并在每个请求中重复进行成员查找。
在此处查看更详细的描述:https://www.johnmorrisonline.com/build-php-login-form-using-sessions/
答案 3 :(得分:0)
其他人对$ _SESSION变量的说法是正确的。如果使用session_start();
,则这些值可以在用户浏览器的多个请求中保留。 $ _SESSION值将特定于访问您网站的用户。
关于$ result对象,$result->fetch_assoc();
仅从表中获取一行。因此,仅当用户名与members表的第一行匹配时,当前代码才有效。最好只查询用户名与其输入内容匹配的行。请注意,如果只是将字符串串联在一起进行查询,则存在很大的安全风险,因此应使用准备好的语句(https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection)