Ben bir DB tüm oturumları saklamak istiyorum ve bu kadar okuyun ve aşağıdaki sınıf hayata geçirdik:
<?php
/**
* This class handles users sessions and stores the session in the DB rather than in a file. This way stops any
* shared host security problems that could potentially happen.
*/
class sessionHandler {
/**
* Initial constructor which takes the database object as a param, to do all the database stuff
* @param object $db The datase object
*/
public function __construct ($db) {
$this->db = $db;
$this->setHandler();
}
function setHandler() {
session_set_save_handler(array(&$this, "open"),
array(&$this, "close"),
array(&$this, "read"),
array(&$this, "write"),
array(&$this, "destroy"),
array(&$this, "clean")
);
}
/**
* Initiate a database object if necessary
*/
function open() {
$this->db->connect();
}
/**
* Write session id and data to the database
* @param string $id The hashed 32 char session id, unique to a user
* @param string $data Serialized session array from the unique session
* @return id The newly inserted ID of the database
*/
function write($id, $data) {
$access = time();
$dateAdded = date("Y-m-d G:i:s");
$this->db->wrapper->where(array("sessionId"=>$id));
$this->db->query($this->db->wrapper->delete(__CLASS__));
//fopen a file and store this in it that way we can debug
$query = $this->db->wrapper->insert(__CLASS__, array("sessionId"=>$id,"dateAdded"=>$dateAdded,"sessionData"=>$data));
$this->db->query($query);
return $this->db->insertId();
}
/**
* Retrieve the session data for a given session id
* @param string $id The hashed 32 char session id, unique to a user
* @return string The session data found for the given session id
*/
function read($id) {
$id = $this->db->wrapper->escape($id);
$row = $this->db->fetch(1, $this->db->wrapper->get_where(__CLASS__,array("sessionId"=>$id)), array(),false);
if ($row) {
return $row['data'];
}
return "";
}
/**
* Delete a session from the database by its unique session id
* @param string $id The hashed 32 char session id, unique to a user
* @return integer The number of deleted rows - should only ever be 1
*/
function destroy($id) {
$id = $this->db->wrapper->escape($id);
$this->db->wrapper->where(array("sessionId"=>$id));
$this->db->query($this->db->wrapper->delete(__CLASS__));
return $this->db->affectedRows();
}
/**
* Garage collector which deletes old records in the database, delete sessions that have expired. This is
* determined by the session.gc_maxlifetime variable in the php.ini
* @param integer $max The maximum number of seconds allowed before a session is to be considered expired
* @return integer The number of deleted rows
*/
function clean($max) {
$old = time() - $max;
$old = $this->db->wrapper->escape($old);
$this->db->wrapper->where(array("access"=>$old), "<");
$this->db->query($this->db->wrapper->delete(__CLASS__));
return $this->db->affectedRows();
}
/**
* Close the database connection once a read / write has been complete
*/
function close() {
$this->db->close();
}
/**
* End the current session and store session data.
*/
public function __destruct(){
session_write_close();
}
}
Benim kodunda gördüğünüz gibi, ben bir param olarak sınıfa DB nesne geçmek. Şöyle Benim önyükleme dosyası:
$db = mogDB::init();
$sh = new sessionHandler($db);
session_start();
Benim burada kendi sınıfları birkaç kullandık MogDB yüzden: init () temelde doğru kimlik bilgileri ile bir veri tabanı bağlantı oluşturur. Sarıcı şeyler bu yüzden (bana biraz tembel sanırım) sql sorgudan sonra sql sorgusu yazın dışarı zorunda değilsin temelde.
Ama olsun sorun benim php hata günlüğüne şudur:
08-Apr-2010 17:40:31] PHP Warning: mysql_insert_id(): 11 is not a valid MySQL-Link resource in /library/mysql.php on line 69
Ben kadar ben olabildiğince bu debug ve o DB oturum yazmaya çalıştığında, bu başarısız olduğu görünüyor. Ben bir dosyaya sorgu kurtarmayı başardı ve phpmyadmin üzerinden veritabanına ince ithalatı, öylesine onun değil sorgu sorunu şu ki var.
şöyle mysql.php satır 69 olduğu:
68. public function insertId() {
69. return mysql_insert_id($this->id);
70. }
Any help would be much appreciated Thanks