Я пытался закодировать систему входа в архитектуру MVC, конечно, обработку сеансов, но я понял, что не уверен, правильно ли сформулирована моя идея.Обработка PHP-сессий в архитектуре MVC
Я собираюсь показать вам код, записывающий претензию на это.
Мое мнение:
<?php
session_start();
session_destroy();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/backend.css">
<script src="../js/admlog.js"></script>
<title>Access to administration panel</title>
</head>
<body>
<form method="post" action="../controller/admlog.php">
<h2><span class="entypo-login"></span> Login</h2>
<button class="submit"><span class="entypo-lock"></span></button>
<span class="entypo-user inputUserIcon"></span>
<input type="text" name="user" class="user" placeholder="username"/>
<span class="entypo-key inputPassIcon"></span>
<input type="password" name="password" class="pass"placeholder="password"/>
</form>
</body>
</html>
Ничего сказать здесь, основной формой HTML.
контроллер страницы входа:
<?php
//controller!
require "../model/backend.php";
$username = $_POST['user'];
$password = $_POST['password'];
$dbcom = new dbInteraction;
$dbcom->admlog($username, $password);
$dbcom->conclose();
?>
Очень просто тоже, что я делаю здесь принимают значения моих входов и отправить их в backend.php, где будет обрабатываться ходатайство.
функция Backend, где обрабатывается Логин:
public function admlog($username, $password){
$this->username = $username;
$this->password = $password;
//$this->pdo = $pdo;
//$adm = 1;
$myquery = 'SELECT username FROM users WHERE username = :username AND password = :password'; //check admin flag
$stmt = $this->pdo->prepare($myquery);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
//$stmt->bindParam(':isadmin', $adm, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if (count($result) > 0){
session_start();
$_SESSION['login'] = $result['username'];
header('Location: ../view/backMain.php');
}else{
session_start();
$_SESSION['login'] = "";
//header('Location: ../manage.php');
echo 'Incorrect user or password';
}
}
Весь код работает без проблем, я имею в виду, выберите выполняется правильно и пользователь может войти в систему.
Проблема заключается в том, как обрабатывать сеансы. Когда пользователь находится в db, я закодировал:
session_start();
$_SESSION['login'] = $result['username'];
header('Location: ../view/backMain.php');
Чтобы создать новую сессию, нет? Ну, целевая страница (backMain.php) имеет ограничение, ограничение, которое проверяет, есть ли устоявшийся сеанс или нет.
<?php
if(!isset($_SESSION['login']))
{
header("Location: http://google.es");
}
?>
Я должен предположить, что это так, но когда я пытаюсь получить доступ, я вижу, что нет.
Как обрабатывается сеанс в такой архитектуре? Для меня код имеет смысл, но результат очевиден, что нет.
Я перенаправляюсь в google.es, потому что условие не находит установленный сеанс, даже если я установил этот сеанс в бэкэнд.
Я должен что-то упустить.
Благодаря
Пожалуйста, поймите, что у вас есть логика в вашем представлении, которая должна находиться внутри контроллера (запуск и уничтожение сеанса), если вы хотите преследовать реальную функциональность MVC. Кроме того, класс взаимодействия с БД не является лучшим местом для ввода логина входа в систему, в противном случае - все, что должно получить доступ к базе данных, попадает в класс базы данных. – moorscode