不明白为什么需要$ _SESSION

时间:2019-04-04 22:23:55

标签: php session-variables session-state

我试图通过一个示例创建一个登录表单。我成功了,但我不明白。

为什么需要$_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();

4 个答案:

答案 0 :(得分:2)

我建议您在代码的开头始终实施 session_start() ,以避免不良行为。


什么是会话

要了解,您必须了解什么是 PHP会话

  

会话是一种为当前用户在网站的所有页面上保留变量的方法。

工作方式

首先,您必须要求PHP初始化会话。为此,必须在代码的开头添加session_start()

服务器响应客户端时,会附加一个名为PHPSESSID的cookie,其中包含用户的唯一会话标识符。

在每次请求时,浏览器都会将此cookie发送到服务器,以便php可以从服务器的硬盘中恢复会话。

注册会话变量的最常用方法是$_SESSION['key'] = $value;

最终答案

最后,第$_SESSION['umsco'] = $username;行将用户的用户名存储在其会话中,直到。

secret.php中,您可能检查该值是否已分配,或者是否存在会话以检查用户是否已登录。这就是强制性原因,否则,登录表单将没有任何意义。

另一个资源:Is closing the mysql connection important?

答案 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