it-swarm.com.de

Wie überprüfe ich, ob ein Benutzer in PHP angemeldet ist?

Ich bin ziemlich neu in php und versuche herauszufinden, wie man Sitzungen verwendet, um zu überprüfen, ob ein Benutzer bei einer Website angemeldet ist, damit er die Berechtigung hat, auf bestimmte Seiten zuzugreifen. 

Ist das etwas, das kompliziert ist oder weil ich ein Noob bin, dass ich es nicht herausfinden kann?

Danke für die Hilfe! 

40
Andrew

Anmeldungen sind nicht zu kompliziert, aber es gibt bestimmte Teile, die fast alle Anmeldeprozesse benötigen.

Stellen Sie zunächst sicher, dass Sie die Sitzungsvariable auf allen Seiten aktivieren, für die Kenntnis über den Anmeldestatus erforderlich ist, indem Sie dies an den Anfang dieser Seiten setzen:

session_start();

Wenn der Benutzer anschließend seinen Benutzernamen und sein Kennwort über das Anmeldeformular übermittelt, werden Sie normalerweise dessen Benutzernamen und Kennwort überprüfen, indem Sie eine Datenbank abfragen, die Informationen zu Benutzername und Kennwort enthält, z. Wenn die Datenbank eine Übereinstimmung zurückgibt, können Sie eine Sitzungsvariable festlegen, die diese Tatsache enthält. Möglicherweise möchten Sie auch andere Informationen hinzufügen:

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
}

Fügen Sie dann auf der Seite, die vom angemeldeten Status abhängig ist, Folgendes ein (vergessen Sie nicht die 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.";
}

Das sind die Grundkomponenten. Wenn Sie Hilfe zum SQL-Aspekt benötigen, gibt es zahlreiche Tutorials im Netz.

84
Ben Torell

In 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>

In 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;
}

In 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.";
}

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 ;

In 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>

In 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

Jede Seite, auf der Sie Sitzungsprüfungen durchführen möchten, muss beginnen mit:

session_start();

Von dort aus überprüfen Sie Ihr Session-Array auf eine Variable, die angibt, dass sie angemeldet sind:

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

Wenn Sie sich anmelden, müssen Sie nur diesen Wert einstellen:

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

Bei fast allen Antworten auf dieser Seite wird das Vorhandensein einer Sitzungsvariablen geprüft, um eine Benutzeranmeldung zu überprüfen. Das ist absolut in Ordnung, aber es ist wichtig zu bedenken, dass der Sitzungsstatus von PHP für Ihre Anwendung nicht eindeutig ist, wenn sich mehrere virtuelle Hosts/Sites auf demselben Bare-Metal befinden.

Wenn Sie zwei PHP -Anwendungen auf einem Webserver haben, die beide den Anmeldestatus eines Benutzers mit einem booleschen Flag in einer Sitzungsvariablen mit dem Namen 'isLoggedIn' überprüfen, kann sich ein Benutzer bei einer der Anwendungen anmelden und dann automatisch auf die zugreifen Sekunde ohne Nachweise.

Ich vermute, dass selbst die meisten Dinosaurier von kommerziellem Shared Hosting die virtuelle PHP - Umgebung nicht auf eine solche Weise gemeinsam nutzen lassen, dass dies auf mehreren Kundenstandorten (mehr) geschehen könnte, aber dies sollte in Ihren eigenen Umgebungen berücksichtigt werden . 

Die sehr einfache Lösung besteht darin, eine Sitzungsvariable zu verwenden, die die App identifiziert, und nicht ein boolesches Flag. z.B. $ SESSION ["isLoggedInToExample.com"] .

Quelle: Ich bin ein Penetrationstester und habe viel Erfahrung darüber, wie man Sachen nicht machen sollte.

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

sie können eine Sitzung machen und platzieren:

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

Hinweis: Sie müssen ein Formular erstellen, das $_SESSION['username'] = $login_input_username;enthält.

0
Richard Kok

Muss auf allen Seiten angezeigt werden, bevor Sie nach aktuellen Sitzungen suchen

session_start();

Prüfen Sie, ob $ _SESSION ["eingeloggt"] ( ist nicht ) wahr ist.

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

}

0
Jeacovy Gayle

Siehe dieses Skript zur Registrierung. Einfach und sehr leicht zu verstehen.

<?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();
?>

Stellen Sie sicher, dass Sie alle Datenbankmaterialien mit phpMyAdmin erstellen. Es ist ein sehr einfaches Werkzeug zum Arbeiten. Sie finden es hier: http://www.phpmyadmin.net/home_page/index.php

0
user3627194