web-dev-qa-db-fra.com

Comment vérifier si un utilisateur est connecté en php?

Je suis assez nouveau sur php et j'essaie de comprendre comment utiliser des sessions pour vérifier si un utilisateur est connecté à un site Web afin d'obtenir l'autorisation d'accéder à certaines pages. 

Est-ce quelque chose qui est compliqué ou est-ce parce que je suis un noob que je ne peux pas le comprendre?

Merci pour l'aide! 

40
Andrew

Les connexions ne sont pas trop compliquées, mais il existe des éléments spécifiques dont presque tous les processus de connexion ont besoin.

Tout d’abord, assurez-vous d’activer la variable de session sur toutes les pages nécessitant la connaissance de l’état de la connexion en la plaçant au début de ces pages:

session_start();

Ensuite, lorsque l'utilisateur soumettra 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 des informations sur le nom d'utilisateur et le mot de passe, comme MySQL. Si la base de données renvoie une correspondance, vous pouvez ensuite définir une variable de session pour contenir ce fait. Vous voudrez peut-être aussi 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, insérez ce qui suit (n’oubliez pas la 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 composants de base. Si vous avez besoin d'aide avec l'aspect SQL, il existe de nombreux tutoriels sur le net.

84
Ben Torell

Dans Login.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 Login.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 Member.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.";
}

Dans 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 Register.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 Register.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!"
}
19
Troy Benson

Toute page sur laquelle vous souhaitez effectuer des contrôles de session doit commencer par:

session_start();

À partir de là, vous recherchez dans votre tableau de session une variable indiquant qu'ils sont connectés:

if (!$_SESSION["loggedIn"]) redirect_to_login();

Les connecter n’est rien d’autre que définir cette valeur:

$_SESSION["loggedIn"] = true;
12
Sampson

Presque toutes les réponses de cette page reposent sur la vérification de l’existence d’une variable de session pour valider la connexion d’un utilisateur. Cela convient parfaitement, mais il est important de noter que l'état de la session PHP n'est pas propre à votre application s'il existe plusieurs hôtes/sites virtuels sur le même système nu.

Si vous avez deux applications PHP sur un serveur Web, vérifiant tous deux le statut de connexion d'un utilisateur avec un indicateur booléen dans une variable de session appelée 'isLoggedIn', un utilisateur peut se connecter à l'une des applications puis accéder automatiquement deuxième sans informations d'identification.

Je soupçonne que même le plus dinosaure d’hébergement partagé commercial ne permettrait pas aux hôtes virtuels de partager le même environnement PHP de telle sorte que cela puisse se produire sur plusieurs sites clients, mais que ce soit à considérer dans vos propres environnements. . 

La solution très simple consiste à utiliser une variable de session qui identifie l'application plutôt qu'un indicateur booléen. par exemple $ SESSION ["isLoggedInToExample.com"] .

Source: Je suis un testeur de pénétration, avec beaucoup d’expérience sur la façon de ne pas faire les choses.

6
hiburn8
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";

    }
}
0
moriarty5

vous pouvez faire une session et la placer:

//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!";
}

note: vous devez créer un formulaire contenant $_SESSION['username'] = $login_input_username;

0
Richard Kok

Besoin sur toutes les pages avant de vérifier les sessions en cours

session_start();

Vérifiez si $ _SESSION ["logIn"] ( n'est pas ) true - Sinon, redirigez-les vers la page de connexion.

if($_SESSION["loggedIn"] != true){
//echo 'not logged in';
header("Location: login.php");
exit;

}

0
Jeacovy Gayle

Voir ce script pour vous inscrire. 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 de créer tous les éléments de la base de données en utilisant phpMyAdmin. C'est un outil très facile à utiliser. Vous pouvez le trouver ici: http://www.phpmyadmin.net/home_page/index.php

0
user3627194