2017-11-01 5 views
2

Ich bin ziemlich neu in PHP.Der richtige Weg, um Sitzungen zu verwenden?

Ich habe ein Login-System für meine Website gemacht und ich frage mich, ob ich das richtig mache. Auf meinem login.php, der die Anmeldeanforderung verarbeitet, habe ich Sitzungsvariablen erstellt, die auf meiner Site verwendet werden können. Ich frage mich, ob dies der effizienteste/sicherste Weg ist, die Benutzerdaten zu speichern.

Diese Methode scheint für mich recht gut zu funktionieren. Nehmen wir an, ich benötige Daten aus einer anderen Tabelle, die in meiner Benutzertabelle nicht enthalten ist. Wie würde ich diese Informationen abrufen und in einer Sitzung speichern? Bleibt dies für meine Benutzer anfällig, da der Browser all diese Informationen enthält? oder bekomme ich ein völlig falsches Verständnis von Sitzungen.

<?php 
/* User login process, checks if user exists and password is correct */ 

// Escape email to protect against SQL injections 
$email = $mysqli->escape_string($_POST['email']); 
$result = $mysqli->query("SELECT * FROM users WHERE email='$email'"); 

if ($result->num_rows == 0) { // User doesn't exist 
    $_SESSION['message'] = "User with that email doesn't exist!"; 
    header("location: error.php"); 
} else { // User exists 
    $user = $result->fetch_assoc(); 

    if (password_verify($_POST['password'], $user['password'])) { 

     $_SESSION['email'] = $user['email']; 
     $_SESSION['user_name'] = $user['user_name']; 
     $_SESSION['active'] = $user['active']; 
     $_SESSION['paid'] = $user['paid']; 
     $_SESSION['bitaddress'] = $user['bitaddress']; 
     $_SESSION['id'] = $user['id']; 
     $_SESSION['firstName'] = $user['firstName']; 
     $_SESSION['lastName'] = $user['lastName']; 

     // This is how we'll know the user is logged in 
     $_SESSION['logged_in'] = true; 

     header("location: checksum.php"); 
    } else { 
     $_SESSION['message'] = "You have entered wrong password, try again!"; 
     header("location: error.php"); 
    } 
} 
+1

Sie sollten 'session_start() 'vor dem Zugriff auf' $ _SESSION'-Variablen hinzufügen, damit eine Sitzung fortgesetzt werden kann (falls sie noch nicht abgelaufen ist) –

+0

Allgemeine Hinweise in späteren Versionen von PHP bestehen darin, NICHT auf superglobale Arrays zuzugreifen direkt. Nur ein f.y.i. –

+0

@chade_ Ich benutze session_start() am Anfang jeder Seite Ich benötige Zugriff auf die Daten. Mein Fehler hätte ich hinzufügen sollen. –

Antwort

3

Sie ein Verfahren für Sitzungen wie schaffen sollen:

function session_start(){ 
    session_start() 
} 
function session_create($key,$value){ 
    return $_SESSION[$key] = $value; 
} 
function session_destroy(){ 
    session_destroy(); 
} 
+2

Die Funktionen, die Sie geschrieben haben, scheinen redundant, obwohl – Akintunde007

+0

auf diese Weise der gute Weg für die Verwendung Sitzungen – hasnain

+0

Great ist. Vielen Dank –

0

Solange Sie verschiedene Schlüssel verwenden, können Sie Daten aus mehreren Tabellen speichern (oder anderen Werten).

Sitzungen werden auf der Serverseite gespeichert, daher verfügt Ihr Browser nicht über diese Informationen. Es gibt jedoch immer noch Sicherheitslücken, siehe Session-Hijack https://www.owasp.org/index.php/Session_hijacking_attack.

Im Allgemeinen verwenden Sie die Sitzungen gut.

Verwandte Themen