Comment vérifier si un utilisateur est connecté en php?
je suis assez nouveau à php et j'essaye de comprendre comment utiliser les sessions pour vérifier et voir si un utilisateur est connecté dans un site web afin qu'ils aient l'autorisation d'accéder à des pages spécifiques.
Est-ce quelque chose qui est compliqué ou est-ce parce que je suis un noob que je ne peux pas la comprendre?
Merci pour l'aide!
9 réponses
les Logins ne sont pas trop compliqués, mais il y a des pièces spécifiques dont presque tous les processus de connexion ont besoin.
tout d'abord, assurez-vous d'activer la variable session sur toutes les pages qui nécessitent la connaissance de l'état de connexion en mettant ceci au début de ces pages:
session_start();
ensuite, lorsque l'utilisateur soumet son nom d'utilisateur et son mot de passe via le formulaire de connexion, vous vérifierez généralement son nom d'utilisateur et son mot de passe en interrogeant une base de données contenant le nom d'utilisateur et le mot de passe. informations, telles que MySQL. Si la base de données renvoie une correspondance, vous pouvez alors définir une variable de session pour contenir ce fait. Vous pouvez également inclure d'autres informations:
if (match_found_in_database()) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username; // $username coming from the form, such as $_POST['username']
// something like this is optional, of course
}
ensuite, sur la page qui dépend de l'état de connexion, mettez ce qui suit (n'oubliez pas le session_start()
):
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
echo "Welcome to the member's area, " . $_SESSION['username'] . "!";
} else {
echo "Please log in first to see this page.";
}
ce sont les composantes de base. Si vous avez besoin d'aide avec L'aspect SQL, il y a des tutoriels-a-plenty autour du net.
Dans La Connexion.html:
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Login Form</title>
</head>
<body>
<section class="container">
<div class="login">
<h1>Login</h1>
<form method="post" action="login.php">
<p><input type="text" name="username" value="" placeholder="Username"></p>
<p><input type="password" name="password" value="" placeholder="Password"></p>
<p class="submit"><input type="submit" name="commit" value="Login"></p>
</form>
</div>
</body>
</html>
Dans La Connexion.php:
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$username=$_POST['username'];
$password=$_POST['password'];
// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1){
session_start();
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
}
Dans Membre.php:
session_start();
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
echo "Welcome to the member's area, " . $_SESSION['username'] . "!";
} else {
echo "Please log in first to see this page.";
}
in MYSQL:
CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '',
`password` varchar(65) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
Dans Le Registre.html:
<html>
<head>
<title>Sign-Up</title>
</head>
<body id="body-color">
<div id="Sign-Up">
<fieldset style="width:30%"><legend>Registration Form</legend>
<table border="0">
<form method="POST" action="register.php">
<tr>
<td>UserName</td><td> <input type="text" name="username"></td>
</tr>
<tr>
<td>Password</td><td> <input type="password" name="password"></td>
</tr>
<tr>
<td><input id="button" type="submit" name="submit" value="Sign-Up"></td>
</tr>
</form>
</table>
</fieldset>
</div>
</body>
</html>
Dans Le Registre.php:
<?php
define('DB_HOST', '');
define('DB_NAME', '');
define('DB_USER','');
define('DB_PASSWORD','');
$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());
$userName = $_POST['username'];
$password = $_POST['password'];
$query = "INSERT INTO members (username,password) VALUES ('$userName','$password')";
$data = mysql_query ($query)or die(mysql_error());
if($data)
{
echo "YOUR REGISTRATION IS COMPLETED...";
}
else
{
echo "Unknown Error!"
}
toute page sur laquelle vous voulez effectuer des vérifications de session doit commencer par:
session_start();
A partir de là, vous vérifiez votre tableau de session pour une variable indiquant qu'ils sont connectés:
if (!$_SESSION["loggedIn"]) redirect_to_login();
les connecter n'est rien de plus que de définir cette valeur:
$_SESSION["loggedIn"] = true;
tout d'Abord, mes excuses, j'apprécie que les réponses ne devraient pas être des commentaires sur d'autres réponses... mais b) c'est très important...
presque toutes les réponses sur cette page reposent sur la vérification de l'existence d'une variable de session pour valider l'ouverture de session d'un utilisateur. C'est absolument parfait, mais il est important de considérer que L'état de session PHP n'est pas unique à votre application s'il y a plusieurs hôtes virtuels/sites sur le même métal nu.
si vous avez deux applications PHP sur un serveur web, toutes les deux vérifiant l'état de connexion d'un utilisateur avec un drapeau booléen dans une variable de session appelée "isLoggedIn", alors un utilisateur pourrait se connecter à l'une des applications et ensuite accéder automatiquement à la seconde sans justificatifs d'identité.
je soupçonne même le plus dinosaure de l'hébergement partagé commercial ne laisserait pas les hôtes virtuels partager le même environnement PHP d'une telle manière que cela pourrait se produisent à travers le site de plusieurs clients (plus), mais son quelque chose à considérer dans vos propres environnements.
La solution très simple est d'utiliser une variable de session qui identifie l'application plutôt qu'un indicateur booléen. E. g $ SESSION["isLoggedInToExample.com"].
Source: je suis un testeur de pénétration, avec beaucoup d'expérience sur la façon dont vous ne devriez pas faire des choses.
else if (isset($_GET['actie']) && $_GET['actie']== "aanmelden"){
$username= $_POST['username'];
$password= md5($_POST['password']);
$query = "SELECT password FROM tbl WHERE username = '$username'";
$result= mysql_query($query);
$row= mysql_fetch_array($result);
if($password == $row['password']){
session_start();
$_SESSION['logged in'] = true;
echo "Logged in";
}
}
voir ce script pour enregistrer. Simple et très facile à comprendre.
<?php
define('DB_HOST', 'Your Host[Could be localhost or also a website]');
define('DB_NAME', 'databasename');
define('DB_USERNAME', 'Username[In many cases root but some sites offer MySql Page where the username might be different]');
define('DB_PASSWORD', 'whatever you keep[if username is root then 99% password is blank]');
$link = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
if (!$link) {
die('Could not connect line 9');
}
$DB_SELECT = mysql_select_db(DB_NAME, $link);
if (!$DB_SELECT) {
die('Could not connect line 15');
}
$valueone = $_POST['name'];
$valuetwo = $_POST['last_name'];
$valuethree = $_POST['email'];
$valuefour = $_POST['password'];
$valuefive = $_POST['age'];
$sqlone = "INSERT INTO user (name, last_name, email, password, age) VALUES ('$valueone','$valuetwo','$valuethree','$valuefour','$valuefive')";
if (!mysql_query($sqlone)) {
die('Could not connect name line 33');
}
mysql_close();
?>
assurez-vous que vous faites tous les trucs de base de données en utilisant phpMyAdmin. Ses un outil très simple de travailler avec. Vous pouvez le trouver ici: http://www.phpmyadmin.net/home_page/index.php
besoin sur toutes les pages avant de vérifier les sessions en cours
session_start();
Vérifier si $_SESSION["loggedIn"] (n'est pas) vrai - Si non, les rediriger vers la page de connexion.
if($_SESSION["loggedIn"] != true){
//echo 'not logged in';
header("Location: login.php");
exit;
}
//start session
session_start();
//check do the person logged in
if($_SESSION['username']==NULL){
//haven't log in
echo "You haven't log in";
}else{
//Logged in
echo "Successfully log in!";
}
remarque:vous devez faire un formulaire qui contient $_SESSION['username'] = $login_input_username;
<?php
session_start();
if(!isset($_SESSION["login"]) && $SESSION["login"] =="OK")){
header("Location: index.php");
exit;
?>