Не понимаю, зачем нужен $ _SESSION - PullRequest
0 голосов
/ 05 апреля 2019

Я попытался создать форму входа на примере.Я сделал это работает, но я не понимаю.

Почему требуется $_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 ]

2 голосов
/ 05 апреля 2019

Я советую вам всегда применять session_start() в начале вашего кода , чтобы избежать плохого поведения.


Что такое сеанс

Чтобы понять, вы должны понимать, что такое PHP-сессия .

Сессия - это способ хранения переменных на всех страницах вашего сайта для текущего пользователя.

Как это работает

Сначала вы должны попросить PHP инициализировать сеанс.Для этого вы должны добавить session_start() в начале вашего кода.

Когда сервер отвечает клиенту, он добавляет файл cookie с именем PHPSESSID, который содержит уникальный идентификатор сеанса пользователя.

При каждом запросе браузер отправляет этот cookie-файл на сервер, чтобы php мог восстановить сеанс с жесткого диска сервера.

Наиболее общий способ регистрации переменной сеанса - * 1029.*.

Окончательный ответ

В конце строки $_SESSION['umsco'] = $username; сохраняют имя пользователя в своем сеансе до тех пор, пока

В secret.php вы, вероятно, проверяете , назначено ли это значение, или , если сеанс существует , чтобы проверить, вошел ли пользователь в систему. Поэтому это обязательно, в противном случае форма входа будет иметьнет смысла.

Другой ресурс: Естьважно закрыть соединение mysql?

0 голосов
/ 05 апреля 2019

То, что другие говорили о переменной $ _SESSION, верно. При использовании session_start(); эти значения могут сохраняться в нескольких запросах из браузера пользователя. Значение $ _SESSION будет зависеть от пользователя, посещающего ваш сайт.

Что касается объекта $ result, $result->fetch_assoc(); будет извлекать только одну строку из вашей таблицы. Таким образом, ваш текущий код будет работать только в том случае, если имя пользователя соответствует 1-й строке таблицы членов. Лучше всего запрашивать только те строки, в которых имя пользователя соответствует введенному. Обратите внимание, что существует большая угроза безопасности, если вы просто объединяете строки для запроса, поэтому вы должны использовать подготовленные операторы (https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection)

0 голосов
/ 05 апреля 2019

Во-первых, вам нужно запросить членов, где имя пользователя и пароль соответствуют данным $ _POST.

Во-вторых, все, что хранится в переменной $ _SESSION, будет доступно между запросами.Как правило, вы хотите «запомнить» идентификатор пользователя или аналогичный, чтобы вам не нужно было вводить имя пользователя / пароль и повторять поиск членов при каждом запросе.

Более подробное описание здесь: https://www.johnmorrisonline.com/build-php-login-form-using-sessions/

0 голосов
/ 05 апреля 2019

В результате вы в следующий раз позвоните

session_start();
$loggedUserName = $_SESSION['umsco'];

этот пользователь (имя пользователя) будет доступен для вас везде, где вам это нужно.

Просто прочитайте основы СЕССИИ, и вы сможете это понять.

...