Guten Abend, Leute!
Ich habe mich heute mal an eine Session-Klasse gesetzt. Davon gibt es ja die verschiedensten Variationen... Nur komme ich noch nicht wirklich damit klar. Wie Sessions funktionieren, klar, das weiß ich. Aber das in eine Klasse umzusetzen, ist wirklich ziemlich kompliziert! Zumindest für mich.
Ich habe mir auch schon einige Klassen im Internet angeguckt. Aber ich bin nunmal dickköpfig und möchte meine eigene Klasse zum Laufen bringen, und ich würde mich freuen, wenn ihr mir da ein paar Tipps geben könntet!
Den ganzen Code schreibe ich dann unten zusammenhängend, damit es leichter zu lesen ist.
Meine Grundüberlegung ist, bei jeder neuen Instanz eine neue Session zu starten. Deshalb wird im Konstruktor irgendein Name für die Session angegeben. Wie schaut es aus, kann ich hier einfach problemlos eine neue Session starten?
Außerdem wird hier überprüft, ob evtl. durch Cookies der User bereits ermittelt werden kann.
Danach kommt eine Login-Methode. Bei dieser werden Username und -passwort auf ihre Gültigkeit überprüft. Ich speichere dann ggf. die Usernamen in einer Session-Variable mit dem Sessionnamen in der 1. und den Userangaben in der 2. Dimension.
Falls $permanent true ist, wird der User dauerhaft eingeloggt, bzw. zwei Cookies gesetzt.
In der Logout-Methode werden die Cookies zerstört und auf die Destroy-Methode zurückgegriffen, welche die Session zertört.
Was haltet ihr von der Klasse? Wo gibt es Stärken, wo Schwächen? Wo könnte es gar zu Fehlern oder Risiken kommen?
Über konstruktive Antworten würde ich mich freuen!
Liebe Grüße
Matze
Ich habe mich heute mal an eine Session-Klasse gesetzt. Davon gibt es ja die verschiedensten Variationen... Nur komme ich noch nicht wirklich damit klar. Wie Sessions funktionieren, klar, das weiß ich. Aber das in eine Klasse umzusetzen, ist wirklich ziemlich kompliziert! Zumindest für mich.
Ich habe mir auch schon einige Klassen im Internet angeguckt. Aber ich bin nunmal dickköpfig und möchte meine eigene Klasse zum Laufen bringen, und ich würde mich freuen, wenn ihr mir da ein paar Tipps geben könntet!
Den ganzen Code schreibe ich dann unten zusammenhängend, damit es leichter zu lesen ist.
Meine Grundüberlegung ist, bei jeder neuen Instanz eine neue Session zu starten. Deshalb wird im Konstruktor irgendein Name für die Session angegeben. Wie schaut es aus, kann ich hier einfach problemlos eine neue Session starten?
Außerdem wird hier überprüft, ob evtl. durch Cookies der User bereits ermittelt werden kann.
Danach kommt eine Login-Methode. Bei dieser werden Username und -passwort auf ihre Gültigkeit überprüft. Ich speichere dann ggf. die Usernamen in einer Session-Variable mit dem Sessionnamen in der 1. und den Userangaben in der 2. Dimension.
Falls $permanent true ist, wird der User dauerhaft eingeloggt, bzw. zwei Cookies gesetzt.
In der Logout-Methode werden die Cookies zerstört und auf die Destroy-Methode zurückgegriffen, welche die Session zertört.
PHP-Code:
<?php
class session {
var $name;
// Der Konstruktor gibt der Session einen eindeutigen Namen
function session($name = '') {
session_start();
$this->name = $name;
// Wenn Cookies vorhanden, Inhalte in Session speichern
if (isset($_COOKIE['username']) && isset($_COOKIE['userpwd'])) {
$_SESSION[$this->name]['name'] = $_COOKIE['username'];
$_SESSION[$this->name]['pwd'] = $_COOKIE['userpwd'];
}
}
// User wird eingeloggt
function login($user_name = '', $user_pwd = '', $permanent = 0) {
global $db, $cookie_timeout;
$result = $db->query("SELECT `name`, `pwd` FROM `users` WHERE `name` = '". $user_name ."' AND `pwd` = '". $user_pwd ."'");
if (!$db->num_rows($result)) {
return false;
} else {
$array = $db->fetch_array($result);
$_SESSION[$this->name]['name'] = $array['name'];
$_SESSION[$this->name]['pwd'] = $array['pwd'];
// Wenn $permanent true, dann Cookies speichern
if ($permanent) {
setcookie('username', $cookie_timeout, $_SESSION['$this->name']);
setcookie('userpwd', $cookie_timeout, $_SESSION['$this->pwd']);
}
return true;
}
}
// Loggt einen User aus
function logout() {
// Die Cookies werden entfernt
if (isset($_COOKIE['username'])) {
setcookie('username', 0, '');
}
if (isset($_COOKIE['userpwd'])) {
setcookie('userpwd', 0, '');
}
// Die Session wird zerstört
$this->destroy();
// Wenn alles gelöscht wurde, true zurückgeben. Ansonsten false
if (!isset($_COOKIE['uername']) && !isset($_COOKIE['userpwd']) && !isset($_SESSION[$this->name])) {
return true;
} else {
return false;
}
}
// Die Session wird zerstört
function destroy() {
session_destroy();
}
}
?>
Über konstruktive Antworten würde ich mich freuen!
Liebe Grüße
Matze
Kommentar