Hallo Chris,
Hallo Experten,
diese Sessions sind für mich notwendig bei dem anmelden von
User:
$_Session[‚user‘] // info über den user
$_Session[‚remember_me‘] //wenn der User eingeloggt bleiben
will
Welcher Wert steht denn hinter $_Session[‚remember_me‘] ?
$_Session[‚time_encrypted_temporar_code‘] //der User wird
abgemeldet nach einer Zeit (Wie mache ich das?)
Ist es jetzt von Vorteil, wenn ich diese $_Sessions in der
Datenbank speicher
Ich ziehe die DB_Session der File-Session vor.
z.Bsp.: $_Session[‚remember_me‘] oder ist es besser wenn diese
am Computer im Browser gespeichert werden? Was ist sicherer?
Vergiss das sofort wieder Login-Identifikationen im Browser zu speichern (Clientside ist Feindesland)
Wie kann ich das PHP Skript umsetzen?
DB-Tabelle Session erstellen -> Eigenen Sessionhandler schreiben -> Sessionhandler in einer Datei initialisieren die immer aufgerufen wird. Hier das Script kriegst du geschenkt (dort kannst du auch herauslesen wie du die DB-Tabelle mit Spalten erstellen musst).
class MySessionHandler {
private static $instance = null;
public static function getInstance(){
if(self::blush:instance === null){
self::blush:instance = new self;
}
return self::blush:instance;
}
protected function \_\_construct() {
}
public function init(){
**//Das musst du selbst anpassen deine Datenbankverbindung das ganze ist PDO**
$this-\>DB = getDatabase();
session\_set\_save\_handler(array($this,'\_open'),
array($this,'\_close'),
array($this,'\_read'),
array($this,'\_write'),
array($this,'\_destroy'),
array($this,'\_gc'));
session\_start();
register\_shutdown\_function('session\_write\_close');
}
public function \_open($path,$name){
return true;
}
public function \_close(){
$this-\>\_gc(0);
return true;
}
public function \_read($sesID){
$sql = "SELECT \* FROM `session` WHERE id = '$sesID'";
$result = $this-\>DB-\>query($sql);
if($result === false){
return '';
}
if(count($result) \> 0){
return $result[0]["value"];
}
else {
return '';
}
}
public function \_write($sesID,$data){
if($data == null){
return true;
}
$sql = "UPDATE `session` SET lastupdated=?,value=? WHERE id=?";
$result = $this-\>DB-\>prepare($sql);
$result = $result-\>execute(array(time(),$data,$sesID));
if($result === false){
return false;
}
// if(count($result) \> 0){
// return true;
// }
else {
$sql = "INSERT INTO session (id,lastupdated,start,value) VALUES (?,?,?,?)";
$result = $this-\>DB-\>prepare($sql);
return $result-\>execute(array($sesID,time(),time(),$data));
}
}
public function \_destroy($sesID){
$sql = "DELETE FROM `session` WHERE id='$sesID'";
$result = $this-\>DB-\>query($sql);
return $result;
}
public function \_gc($life){
$sessionLife = strtotime("-60 minutes");
$sql = "DELETE FROM `session` WHERE lastupdated DB-\>query($sql);
return $result;
}
}
?\>
Aufruf machst du per:
MySessionHandler::getInstance()-\>init();
Ich hab extra für dich die Klasse MySessionHandler genannt, da beim Namen SessionHandler du u.u. Namespaces verwenden müsstest.
Wenn ich die $_Session in der Datenbank speichere benötige ich
dann eine Gerät Erkennung = IP oder Gerät addresse, wenn ja
wie bekommt man diese?
Brauchst du nicht, aber an die IP kommst du über die $_SERVER Variable
http://php.net/manual/de/reserved.variables.server.php
Du kannst einen Hashwert aus Username, Passwort und Browserid erstellen zur Serverseitigen Identifikation nutzen: Bsp:
$logincheck = hash('sha256',$result['pwd']. $result['user'] . $\_SERVER['HTTP\_USER\_AGENT']);
Das Ergebnis brauchst du nicht in einer DB speichern (Modulareabfrage im „Controller“).
Gruß XXD