Sessions in der Datenbank speichern

zzz10

Grünschnabel
Hallo,

mit diesem Thema beziehe ich mich auf das Tutorial aus dem Jahr '07, welches hier gefunden werden kann. ;)

Ich habe mir die .txt genommen & meine DB-Verbindung ganz oben mit $connection eingefügt - dennoch wird NICHTS in die Tabelle sessions gespeichert.
(Den ?>-Tag habe ich am Ende natürlich auch eingefügt. ^^)


Ich hoffe irgendwer kann mir dabei helfen das Problem zu lösen - vielen, vielen Dank!
 
Ich lese mir das Tutorial jetzt nicht extra durch. Hast du den Code genau so übernommen wie er im Tutorial steht? Denn dann sollte er eigentlich richtig sein.
Wenn du kleine Veränderungen vorgenommen hast, dann wäre es nützlich, wenn du diese posten würdest, damit ich einen Blick auf den Code werfen kann ...
 
Ich habe nur diese beiden Sachen (Connection zur DB & den abschließenden PHP-Code) hinzugefügt, sonst absolut nichts.
 
Nocheinmal: Poste bitte den aktuellen, nicht funktionierenden Code, sonst wird das nur eine große Raterei.

Und rundherum [code][/code] nicht vergessen.
 
Ist zwar das erste Mal... aber auch egal...
Und mit dem code-BBCode ist mir schon klar - dumm bin ich nicht. -.-

PHP:
<?php
$connection = mysql_connect("localhost", "XXX", "XXX") OR die(mysql_error()); 
mysql_select_db("XXX");

class SessionSaveHandler_Db {
  protected $connection = null;
  protected $name = '';
    
  public function __construct($connection) {
    $this->connection = $connection;
    session_set_save_handler(array(&$this, 'open'), 
                        array(&$this, 'close'), 
                        array(&$this, 'read'), 
                        array(&$this, 'write'), 
                        array(&$this, 'destroy'), 
                        array(&$this, 'gc'));
    register_shutdown_function('session_write_close');
    session_start();
  }
    
  public function open($save_path, $name) {
    $this->name = $name;
  }
    
  public function close() {}

  public function read($session_id) {
    $query = "SELECT COUNT(*) AS count, session_data FROM `sessions` WHERE session_id = '" . mysql_real_escape_string($session_id, $this->connection) . "' GROUP BY session_id";
    $res = mysql_query($query, $this->connection) OR die(mysql_error());
    $result = mysql_fetch_assoc($res);
    $count = $result['count'];
    $data = $result['session_data'];
    if($count > 0) {
      $data = explode('|', $data);
      array_shift($data);
      $data = implode('|', $data);
      return unserialize(stripslashes($data));
    }else{
      return false;
    }          
  }
    
  public function write($session_id, $data) {
    $session_data = $this->name . '|' . addslashes(serialize($data));
    $session_id = mysql_real_escape_string($session_id, $this->connection);
    $query = "REPLACE INTO `sessions` VALUES ('$session_id', '$session_data', " . time() . ")";
    mysql_query($query, $this->connection) OR die(mysql_error());
  }
    
  public function destroy($session_id) {
    $session_id = mysql_real_escape_string($session_id, $this->connection);
    $query = "DELETE FROM `sessions` WHERE session_id = '$session_id'";
    mysql_query($query, $this->connection) OR die(mysql_error());
  }
  
  public function gc($maxlifetime) {
    $maxlifetime = (int) $maxlifetime;
    $query = "DELETE FROM `sessions` WHERE (session_time + $maxlifetime) < UNIX_TIMESTAMP()";
    mysql_query($query, $this->connection) OR die(mysql_error());
  }
}
?>
 
Zuletzt bearbeitet:
Damit zählst zu den 20% in diesem Forum, die noch Wissen was sie tun. Das mit BBCode muss bei Neulingen einfach gesagt werden, weil so viele es nicht wissen.

Hast schon mal bei write oder read einfach ein sinnloses "echo 'foo';" ausgeben lassen?
Mach das mal und hantier mit Sessions ein bisschen rum. Wenn dann dieser Sinnlos-Text ausgegeben wird, dann weist das session_set_save_handler funktioniert hat und es nur an der Query oder Datenbank liegen könnt.
 
Ah, ja - nur weil ich in diesem Forum hier neu bin, heißt das ja noch lange nicht, dass ich gar keine Ahnung von BBCode's habe. :p

Werd ich nachher mal ausprobieren - mal gucken, ob dann 'ne Session-ID ausgegeben wird oder nicht. :D
 
Zurück