Daha önce yazmış oldugum bir veritabanı session sınıfı var;
/*
Session tablosu şeması
-------------------------------
CREATE TABLE IF NOT EXISTS `session` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`ad` varchar(255) NOT NULL,
`veri` varchar(255) NOT NULL,
`bitis` varchar(30) NOT NULL,
`hash` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ad` (`ad`)
) ENGINE=MEMORY DEFAULT CHARSET=latin5 AUTO_INCREMENT=1;
*/
class DB_Session
{
/**
* Kaydedilecek sessionların ömrü (süresi)
*
* @access public
* @var int
*/
public static $_session_bitis = NULL;
/**
* Session tablosu adı
*
* @access public
* @var string
*/
private $_session_tablo = 'session';
/**
* Session güvenlik hashi
*
* @access private
* @var string
*/
private $_session_hash = NULL;
/**
* Session encrypt güvenlik şifresi
*
* @access private
* @var string
*/
private $_session_sifre = FALSE;
// }}}
// {{{ Konstrüktör
/**
* Konstrüktör
*
* @access public
* @param mixed $_session_bitis session bitis süresi
* @param mixed $_session_sifre session encrypt sifresi (opsiyonel)
* @return void
*/
function __construct($_session_bitis = NULL, $_session_sifre = NULL)
{
if ($session_bitis == NULL) {
$this->_session_bitis = (60 * 5) + time(); // 5 dakika
}
if ($_session_sifre != NULL) {
$this->_session_sifre = $_session_sifre;
}
$this->_session_bitis = $_session_bitis + time();
$this->_session_hash = $this->_sessionHash();
DB_Session::_tumsessionExtract();
}
// }}}
// {{{ set()
/**
* Girilen session adı ve verisi ile yeni bir oturum başlatır,
* Bu oturum verilerini _write() fonksiyonu ile veritabanına kaydeder.
*
* @access public
* @param mixed $session_ad session adi
* @param mixed $session_veri session içeriği
* @param int $session_bitis session süresi
* @return void / boolean
*/
public function set($session_ad, $session_veri)
{
// Kontrollü session yazma işlemi
//if ($this->_sessionKontrol($session_ad) == FALSE) {
if ($this->_session_sifre <> NULL) {
$session_veri = $this->_session_encrypt($session_veri,
$this->_session_sifre);
}
if (!$this->_write($session_ad, $session_veri)) {
return FALSE;
}
//}
return TRUE;
}
// }}}
// {{{ get()
/**
* Session çağırma fonksiyonu, veriye göre sonuç döndürür. (true / false)
*
* @access public
* @param mixed $session_adi Çağrılacak Session adı
* @return mixed
*/
public function get($session_adi, $alan = NULL)
{
// -------------------------
// Session Hash Extra Güvenlik
if ($this->_session_hash == NULL) {
$this->_session_hash = md5(rand(99, 999999) . "_realporn");
}
// -------------------------
if ($this->_session_hash == $this->_session_[$session_adi]['hash'])
{
if ($this->_session_sifre <> NULL) {
if ($alan <> NULL) {
$session_cikti = $this->_session_[$session_adi]["{$alan}"];
} else {
$session_cikti = $this->_session_decrypt($this->_session_[$session_adi]['veri'],
$this->_session_sifre);
}
} else {
if ($alan <> NULL) {
$session_cikti = $this->_session_[$session_adi]["{$alan}"];
} else {
$session_cikti = $this->_session_[$session_adi]['veri'];
}
}
if ($session_cikti) {
return $session_cikti;
}
}
return FALSE;
}
// }}}
// {{{ _write()
/**
* Girilen session adı ve verisini veritabanına kaydeder.
*
* @access private
* @param mixed $session_ad session adi
* @param mixed $session_veri session içeriği
* @param int $session_bitis session süresi
* @return void / boolean
*/
private function _write($session_ad, $session_veri)
{
if ($session_ad != NULL
&& $session_veri != NULL) {
if ($this->_session_hash != NULL
&& $this->_session_bitis != NULL) {
// yazma sorgusu
$this->_write_sql = @mysql_query(
"INSERT INTO `{$this->_session_tablo}` (
`ad`, `veri`, `bitis`, `hash`
) VALUES (
'{$session_ad}', '{$session_veri}',
'{$this->_session_bitis}', '{$this->_session_hash}'
)
");
if ($this->_write_sql) {
return TRUE;
}
}
}
return FALSE;
}
// }}}
// {{{ delete()
/**
* Adı girilen sessionu siler.
*
* @access private
* @param mixed $session_ad session dosya adi
* @return void / boolean
*/
public function delete($session_ad)
{
$this->_delete_sql = @mysql_query("DELETE FROM `{$this->_session_tablo}`
WHERE `ad` = '{$session_ad}'
AND `hash` = '{$this->_session_hash}'");
if (!$this->_delete_sql) {
return FALSE;
}
return TRUE;
}
// }}}
// {{{ _session_encrypt()
/**
* Session verilerini, daha önceden girilmiş key 'e göre şifreler
*
* @access private
* @param mixed $session_veri session veri
* @param mixed $session_key session key
* @return void / boolean
*/
private function _session_encrypt($session_veri, $session_key)
{
for ($i = 1; $i <= strlen($session_veri); $i++) {
$session_encrypt_cikti .= chr(ord(substr($session_veri, $i - 1, 1))
+ ord(substr($session_key, ($i % strlen($session_key))
- 1, 1)));
}
return base64_encode($session_encrypt_cikti);
}
// }}}
// {{{ _session_encrypt()
/**
* Session verileri şifrelenmişse daha önceden girilmiş olan key 'e göre çözer
*
* @access private
* @param mixed $session_veri session veri
* @param mixed $session_key session key
* @return void / boolean
*/
private function _session_decrypt($_session_veri, $session_key)
{
$session_veri = base64_decode($_session_veri);
for ($i = 1; $i <= strlen($session_veri); $i++) {
$session_decrypt_cikti .= chr(ord(substr($session_veri, $i - 1, 1))
- ord(substr($session_key, ($i % strlen($session_key))
- 1, 1)));
}
return $session_decrypt_cikti;
}
// }}}
// {{{ _sessionKontrol()
/**
* session kontrol fonksiyonu
*
* @access private
* @return void
*/
private function _tumsessionExtract()
{
$liste_sql = mysql_query("SELECT * FROM {$this->_session_tablo}");
while ($session = $liste_sql->fetchRow()) {
// session Süre kontrolü
$bitis_kontrol = DB_Session::_bitisKontrol($session['bitis']);
if ($bitis_kontrol === TRUE) { // session süresi bittiyse
DB_Session::delete($session['ad']);
unset($this->_session_[$session['ad']]);
} else {
$this->_session_[$session['ad']]['veri'] = trim($session['veri']);
$this->_session_[$session['ad']]['bitis'] = trim($session['bitis']);
$this->_session_[$session['ad']]['hash'] = trim($session['hash']);
$this->_session_[$session['ad']]['ad'] = trim($session['ad']);
}
}
}
// }}}
// {{{ _bitisKontrol()
/**
* Session suresinin bitip bitmediğini kontrol etme fonksiyonu.
*
* @access private
* @param mixed $session_bitis Session bitiş süresi
* @return boolean
*/
private function _bitisKontrol($session_bitis)
{
if ($session_bitis < time()) {
return TRUE;
}
return FALSE;
}
// }}}
// {{{ _sessionKontrol()
/**
* Girilen session adına göre Session varlığını kontrol etme fonksiyonu.
*
* @access private
* @param mixed $session_ad Session adı
* @return boolean
*/
private function _sessionKontrol($session_ad)
{
$arama_sql = mysql_query("SELECT `id`
FROM `{$this->_session_tablo}`
WHERE `ad` = '{$session_ad}'
AND `hash` = '{$this->_session_hash}'");
if ($arama_sql->numRows() > 0) {
return TRUE;
}
return FALSE;
}
// }}}
// {{{ _sessionHash()
/**
* Her kullanıcıya ayrı session atamak, çakışma önlemek ve güvenlik için,
* veritabanına yazılmak üzere, md5 formatında oturum hash 'ı uretir.
*
* @access private
* @return void
*/
private function _sessionHash()
{
return sha1(md5($_SERVER['REMOTE_ADDR']));
}
}kullanım;
$session_suresi = '7200'; // 2 saat
$session_encrypt_key = 'gizlişifre';
$session = new DB_Session($session_suresi, $session_encrypt_key);
// kaydetme
$session->set('hede');
// çağırma
$session->get('hede');