Contrôle de session login
- mindfullsilence
- Professor


- Inscription: Aoû 04, 2008
- Messages: 846
- Status: Offline
IVe été traitant de ce désordre pour environ une semaine maintenant. Php im prise au Collège ce semestre et ne semble pas prête à découvrir comment obtenir un script de connexion fiable pour travailler. L'objectif du cours est l'infrastructure MVC et l'interaction avec le serveur via PDO.
Jusqu'à présent, j'ai pour mes modèles, les vues et les contrôleurs (nivellement vers le bas pour montrer les bits importants) ce qui suit :
Structure de fichier
Mon /app/index.php :
APP/login/index.php
APP/login/model/user.php
APP/login/View/login.php
Lorsque je clique sur connexion avec un mauvais nom d'utilisateur ou mot de passe, je suis redirigé vers la page de connexion et affiche l'erreur. C'est bien.
Lorsque je clique sur connexion avec un bon nom d'utilisateur et un mot de passe, je suis dirigé vers le « app/index.php ». Aussi bonne
Je suis incapable de vous déconnecter. Lorsque je clique sur mon bouton « logout » Ive installées dans mon en-tête, le $_SESSION ["admin"] n'est pas détruite.
Aussi, si je détruire la session et puis tapez l'emplacement de mon lieu de « app/index.php » dans le navigateur, je suis capable de faire le panneau admin même si je ne suis pas connecté.
J'ai couru la fonction « Déconnexion » sur mon objet d'utilisateur $ (instanciation de la classe utilisateur dans « app/login/model/user.php ») pour effacer mes variables de $_SESSION et ensuite tenté d'écho de $_SESSION ["admin"]. Im getting « 1 » qui me dit de que variables $_SESSION ne sont pas se nettoyés, qui Im deviner quoi je peux trouver la page admin sans journalisation dans.
Jusqu'à présent, j'ai pour mes modèles, les vues et les contrôleurs (nivellement vers le bas pour montrer les bits importants) ce qui suit :
Structure de fichier
- /app
- index.php
- /View
- admin-panel.php
- Header.php
- Footer.php
- / modèle
- Database.php
- /login
- index.php
- / modèle
- User.php
- /View
- login.php
Mon /app/index.php :
PHP Code: [ Select ]
session_start();
if (!isset($_SESSION['admin']) || $_SESSION != 1) {
header ("Location: ./login");
}
//logged in
include 'view/header.php';
require 'model/database_db.php';
include 'view/panel.php';
require_once 'view/footer.php';
?>
if (!isset($_SESSION['admin']) || $_SESSION != 1) {
header ("Location: ./login");
}
//logged in
include 'view/header.php';
require 'model/database_db.php';
include 'view/panel.php';
require_once 'view/footer.php';
?>
- session_start();
- if (!isset($_SESSION['admin']) || $_SESSION != 1) {
- header ("Location: ./login");
- }
- //logged in
- include 'view/header.php';
- require 'model/database_db.php';
- include 'view/panel.php';
- require_once 'view/footer.php';
- ?>
APP/login/index.php
PHP Code: [ Select ]
<?php
// if already logged in
session_start();
echo $_SESSION['admin'];
//////////////////////////////
// Do loggin stuff //
//////////////////////////////
// get action
if(isset($_POST['action']))
{
$action = $_POST['action'];
}
else
{
$action = 'none';
}
$action = strtolower($action);
require_once '../model/database_db.php';
require_once 'model/user.php';
if(is_object($user)) {
$user->logout();
}
switch($action) {
case 'none':
include '../view/header.php';
include 'view/login.php';
include '../view/footer.php';
break;
case 'login':
$user = new User();
$user->set_params($_POST);
$user->login();
if($user->has_errors())
{
include '../view/header.php';
include 'view/login.php';
include '../view/footer.php';
}
else {
include '../view/header.php';
include '../view/panel.php';
include '../view/footer.php';
}
break;
case 'logout':
$user->logout();
echo 'you logged out';
header('Location: ./');
break;
}
?>
// if already logged in
session_start();
echo $_SESSION['admin'];
//////////////////////////////
// Do loggin stuff //
//////////////////////////////
// get action
if(isset($_POST['action']))
{
$action = $_POST['action'];
}
else
{
$action = 'none';
}
$action = strtolower($action);
require_once '../model/database_db.php';
require_once 'model/user.php';
if(is_object($user)) {
$user->logout();
}
switch($action) {
case 'none':
include '../view/header.php';
include 'view/login.php';
include '../view/footer.php';
break;
case 'login':
$user = new User();
$user->set_params($_POST);
$user->login();
if($user->has_errors())
{
include '../view/header.php';
include 'view/login.php';
include '../view/footer.php';
}
else {
include '../view/header.php';
include '../view/panel.php';
include '../view/footer.php';
}
break;
case 'logout':
$user->logout();
echo 'you logged out';
header('Location: ./');
break;
}
?>
- <?php
- // if already logged in
- session_start();
- echo $_SESSION['admin'];
- //////////////////////////////
- // Do loggin stuff //
- //////////////////////////////
- // get action
- if(isset($_POST['action']))
- {
- $action = $_POST['action'];
- }
- else
- {
- $action = 'none';
- }
- $action = strtolower($action);
- require_once '../model/database_db.php';
- require_once 'model/user.php';
- if(is_object($user)) {
- $user->logout();
- }
- switch($action) {
- case 'none':
- include '../view/header.php';
- include 'view/login.php';
- include '../view/footer.php';
- break;
- case 'login':
- $user = new User();
- $user->set_params($_POST);
- $user->login();
- if($user->has_errors())
- {
- include '../view/header.php';
- include 'view/login.php';
- include '../view/footer.php';
- }
- else {
- include '../view/header.php';
- include '../view/panel.php';
- include '../view/footer.php';
- }
- break;
- case 'logout':
- $user->logout();
- echo 'you logged out';
- header('Location: ./');
- break;
- }
- ?>
APP/login/model/user.php
PHP Code: [ Select ]
<?php
class User {
public $error = array();
private $un;
private $pass;
public function __construct() {}
public function set_params($login_info) {
if(count($login_info) > 3) {
session_destroy();
$_SESSION = array();
login_error('Too many inputs, are you a bot?');
}
else {
$this->un = $login_info['username'];
$this->pass = $login_info['password'];
}
}
private function login_error($message) {
array_push($this->error,$message);
}
public function has_errors() {
$er;
if($this->error > 0) {
foreach($this->error as $m) {
$er .= '<span>' . $m . '</span>';
}
return $er;
}
else {
return false;
}
}
public function login() {
$db = Database::getDB();
$q = "SELECT * from admin where ad_username='$this->un' AND ad_password='$this->pass'";
$query = $db->query($q);
if($query->fetch() > 0) {
$_SESSION['admin'] = 1;
session_start();
}
else {
$this->login_error('Your username or password was incorrect');
}
}
public function logout() {
$_SESSION = array();
session_destroy();
}
}
?>
class User {
public $error = array();
private $un;
private $pass;
public function __construct() {}
public function set_params($login_info) {
if(count($login_info) > 3) {
session_destroy();
$_SESSION = array();
login_error('Too many inputs, are you a bot?');
}
else {
$this->un = $login_info['username'];
$this->pass = $login_info['password'];
}
}
private function login_error($message) {
array_push($this->error,$message);
}
public function has_errors() {
$er;
if($this->error > 0) {
foreach($this->error as $m) {
$er .= '<span>' . $m . '</span>';
}
return $er;
}
else {
return false;
}
}
public function login() {
$db = Database::getDB();
$q = "SELECT * from admin where ad_username='$this->un' AND ad_password='$this->pass'";
$query = $db->query($q);
if($query->fetch() > 0) {
$_SESSION['admin'] = 1;
session_start();
}
else {
$this->login_error('Your username or password was incorrect');
}
}
public function logout() {
$_SESSION = array();
session_destroy();
}
}
?>
- <?php
- class User {
- public $error = array();
- private $un;
- private $pass;
- public function __construct() {}
- public function set_params($login_info) {
- if(count($login_info) > 3) {
- session_destroy();
- $_SESSION = array();
- login_error('Too many inputs, are you a bot?');
- }
- else {
- $this->un = $login_info['username'];
- $this->pass = $login_info['password'];
- }
- }
- private function login_error($message) {
- array_push($this->error,$message);
- }
- public function has_errors() {
- $er;
- if($this->error > 0) {
- foreach($this->error as $m) {
- $er .= '<span>' . $m . '</span>';
- }
- return $er;
- }
- else {
- return false;
- }
- }
- public function login() {
- $db = Database::getDB();
- $q = "SELECT * from admin where ad_username='$this->un' AND ad_password='$this->pass'";
- $query = $db->query($q);
- if($query->fetch() > 0) {
- $_SESSION['admin'] = 1;
- session_start();
- }
- else {
- $this->login_error('Your username or password was incorrect');
- }
- }
- public function logout() {
- $_SESSION = array();
- session_destroy();
- }
- }
- ?>
APP/login/View/login.php
PHP Code: [ Select ]
<div id="login">
<h1>Please Login</h1>
<?php
if(is_object($user) && $user->has_errors())
echo '<div class="error">' . $user->has_errors() . '</div>';
?>
<form method="post" action=".">
<input type="text" name="username">
<input type="password" name="password">
<input type="hidden" name="action" value="login" />
<button type="submit">Login</button>
</form>
</div>
<h1>Please Login</h1>
<?php
if(is_object($user) && $user->has_errors())
echo '<div class="error">' . $user->has_errors() . '</div>';
?>
<form method="post" action=".">
<input type="text" name="username">
<input type="password" name="password">
<input type="hidden" name="action" value="login" />
<button type="submit">Login</button>
</form>
</div>
- <div id="login">
- <h1>Please Login</h1>
- <?php
- if(is_object($user) && $user->has_errors())
- echo '<div class="error">' . $user->has_errors() . '</div>';
- ?>
- <form method="post" action=".">
- <input type="text" name="username">
- <input type="password" name="password">
- <input type="hidden" name="action" value="login" />
- <button type="submit">Login</button>
- </form>
- </div>
Lorsque je clique sur connexion avec un mauvais nom d'utilisateur ou mot de passe, je suis redirigé vers la page de connexion et affiche l'erreur. C'est bien.
Lorsque je clique sur connexion avec un bon nom d'utilisateur et un mot de passe, je suis dirigé vers le « app/index.php ». Aussi bonne
Je suis incapable de vous déconnecter. Lorsque je clique sur mon bouton « logout » Ive installées dans mon en-tête, le $_SESSION ["admin"] n'est pas détruite.
Aussi, si je détruire la session et puis tapez l'emplacement de mon lieu de « app/index.php » dans le navigateur, je suis capable de faire le panneau admin même si je ne suis pas connecté.
J'ai couru la fonction « Déconnexion » sur mon objet d'utilisateur $ (instanciation de la classe utilisateur dans « app/login/model/user.php ») pour effacer mes variables de $_SESSION et ensuite tenté d'écho de $_SESSION ["admin"]. Im getting « 1 » qui me dit de que variables $_SESSION ne sont pas se nettoyés, qui Im deviner quoi je peux trouver la page admin sans journalisation dans.
Use your words like arrows to shoot toward your goal.
- Anonymous
- Bot


- Inscription: 25 Feb 2008
- Messages: ?
- Loc: Ozzuland
- Status: Online
Mars 23rd, 2012, 4:26 pm
- natas
- PHP Ninja


- Inscription: Mar 28, 2009
- Messages: 305
- Loc: AFK
- Status: Offline
Dans votre "/ app/index.php" sur la ligne 2, à quoi
effectivement vérifier ?
IVe jamais utilisé qu'avant et juste curieux.
Code: [ Select ]
$_SESSION != 1
effectivement vérifier ?
IVe jamais utilisé qu'avant et juste curieux.
Custom Web Design
- natas
- PHP Ninja


- Inscription: Mar 28, 2009
- Messages: 305
- Loc: AFK
- Status: Offline
- mindfullsilence
- Professor


- Inscription: Aoû 04, 2008
- Messages: 846
- Status: Offline
Hey guys, I got it fonctionne si j'ai pensé partager Id. Était assez simple vraiment, que si vous prenez un coup d'oeil à mon script de « app/login/view/login.php » à la fin, vous remarquerez que theere est une fonction de déconnexion. Eh bien, ce ne pas un tas de bonnes lorsque l'appelant sur un objet, si Im sur une séparée de la page qui n'a pas instancié l'objet encore. Fondamentalement, je n'avais partagé l'objet à travers mes scripts comme global, que donc après être redirigé vers la page d'admin une fois connecté, l'objet utilisateur de $ a été détruit. Donc quand j'ai cliqué sur Déconnexion, j'a été prise de ma page de connexion et essayé d'appeler la fonction « Déconnexion » sur un objet qui n'existe plus. J'ai fini par coller juste « unset($_SESSION["admin"]) à l'intérieur de mon contrôleur de connexion au lieu d'à l'intérieur de la classe. Espoir qui fait sens, si pas et que la personne a besoin pour mieux comprendre, faites le moi savoir et mal poste un code.
Use your words like arrows to shoot toward your goal.
- this213
- Guru


- Inscription: Mar 01, 2004
- Messages: 1242
- Loc: ./
- Status: Offline
Glad you got it fixe, cependant....
Vous devriez seulement employer PHP construit en sessions comme une solution temporaire. Toute personne ayant accès au serveur peut bien faire ce qu'ils veulent avec eux, y compris modifier leur emplacement ou leur lecture pure et simple. Cela va de quadruple pour toute personne écrivant du code sur un hébergement mutualisé avec plusieurs sites web.
Une bien meilleure solution est de simplement générer une chaîne aléatoire et le définir comme un cookie ainsi que stocker dans votre base de données avec divers info client tels que l'agent utilisateur, timestamp et ainsi de suite. Vous pouvez ensuite faire un second tableau pour stocker les variables de session que vous pourriez, qui peuvent inclure l'id d'utilisateur, les paramètres de l'option et ainsi de suite. Lorsque vous détruisez une séance comme ça, vous définissez le cookie à une valeur de non-sens et supprimez les lignes de ces tableaux reliés à cette chaîne aléatoire et il n'existe aucun moyen possible qu'un utilisateur pourrait encore être connecté. Cela vous donne beaucoup plus de contrôle à authentifier une session parce que maintenant vous pouvez faire des choses comme s'assurer que l'utilisateur est encore en utilisant le même navigateur à qu'ils connectés, ou assurer qu'un utilisateur est connecté uniquement d'un endroit.
Vous devriez seulement employer PHP construit en sessions comme une solution temporaire. Toute personne ayant accès au serveur peut bien faire ce qu'ils veulent avec eux, y compris modifier leur emplacement ou leur lecture pure et simple. Cela va de quadruple pour toute personne écrivant du code sur un hébergement mutualisé avec plusieurs sites web.
Une bien meilleure solution est de simplement générer une chaîne aléatoire et le définir comme un cookie ainsi que stocker dans votre base de données avec divers info client tels que l'agent utilisateur, timestamp et ainsi de suite. Vous pouvez ensuite faire un second tableau pour stocker les variables de session que vous pourriez, qui peuvent inclure l'id d'utilisateur, les paramètres de l'option et ainsi de suite. Lorsque vous détruisez une séance comme ça, vous définissez le cookie à une valeur de non-sens et supprimez les lignes de ces tableaux reliés à cette chaîne aléatoire et il n'existe aucun moyen possible qu'un utilisateur pourrait encore être connecté. Cela vous donne beaucoup plus de contrôle à authentifier une session parce que maintenant vous pouvez faire des choses comme s'assurer que l'utilisateur est encore en utilisant le même navigateur à qu'ils connectés, ou assurer qu'un utilisateur est connecté uniquement d'un endroit.
- mindfullsilence
- Professor


- Inscription: Aoû 04, 2008
- Messages: 846
- Status: Offline
Hein, j'aurais jamais pensé cela. Je pourrais revenir sur ce fil plus tard sur la route de demander comment implémenter une telle méthode. Pour l'instant, c'est un projet d'école simple donc je ne pense pas qu'il faut s'inquiéter trop sur la sécurité pour l'instant. J'ont une compréhension très faible de PHP dès maintenant mais je me fais lentement- et Im encore lightyears d'avance le reste de ma classe donc je doute mon instructeur ira trop profondément dans les questions de sécurité. Il a fait pas même crypter les mots de passe pour la base de données parce que l'idée de la conversion d'une valeur de forme à un amas de caractères était trop grande pour la classe de comprendre. L'incapacité des élèves à comprendre le comment ni le pourquoi stupéfié me. Point est mal sûr Im ont encore une quantité incroyable de matériel pour apprendre postdiplôme.
Use your words like arrows to shoot toward your goal.
Page 1 sur 1
Pour répondre à ce sujet, vous devez vous connecter ou vous enregistrer. Il est gratuit.
Afficher de l'information
- Total des messages de ce sujet: 6 messages
- Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 154 invités
- Vous ne pouvez pas poster de nouveaux sujets
- Vous ne pouvez pas répondre aux sujets
- Vous ne pouvez pas éditer vos messages
- Vous ne pouvez pas supprimer vos messages
- Vous ne pouvez pas joindre des fichiers
