Sessions erstellen

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
$_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
z.Bsp.: $_Session[‚remember_me‘] oder ist es besser wenn diese am Computer im Browser gespeichert werden? Was ist sicherer? Wie kann ich das PHP Skript umsetzen?
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?

Vielen Dank für alle hilfreichen Antworten.

Lg,
Chris

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