مشکل با تابع session_set_save_handler و ذخیره کردن سسشن ها در پایگاه داده

i-php-i

Active Member
دوستان یکی دو روزه که دارم با این تابع کار می کنم ولی نتونستم متوجه بشم که مشکل کجاست. چندجا هم مطرح کردم ولی جوابی نگرفتم.

اینجا هم مطرح می کنم ببینم مشکل حل می شه یا نه.

توابع اصلی مخصوص ذخیره تصاویر در پایگاه داده:
PHP:
function ses_open()
{
    global $cxn;
    if($cxn)
    {
        return $cxn;
    }
    else
    {
        return false;
    }
}
 
function ses_close()
{
    global $cxn;
    return mysqli_close($cxn);
}

function ses_read($id)
{
    global $cxn;
     
    $id = mysql_real_escape_string($id);
     
    $sql = "SELECT data FROM sessions WHERE id = '$id'";
     
    if ($result = db_query($cxn,$sql))
    {
        if (mysql_num_rows($result))
        {
            $record = mysql_fetch_assoc($result);
            return $record['data'];
        }
    }
    else
    {
        return '';
    }
}

function ses_write($id, $data)
{
    global $cxn;
     
    $salt='unic_ses_string';
    
    #$_ip=isset ($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP'] : "UNKNOWN";
    #$_ip.=isset ($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR'] : "UNKNOWN"; 
    #$_ip.=isset ($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR'] : 'UNKNOWN';
    
    $_ip=isset ($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR'] : 'UNKNOWN';
    $_agent = isset ($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT'] : 'NO USER AGENT';
 
    $hash=sha1($salt.$_ip.$_agent);
    $access = time(); 
    $id = mysql_real_escape_string($id);
    $access = mysql_real_escape_string($access);
    $data = mysql_real_escape_string($data);
    $sql="INSERT INTO sessions (id,data,access,hash) VALUES ($safe_id,$safe_data,'$now',$hash)
    ON DUPLICATE KEY UPDATE data=$safe_data, access='$access',hash=$hash";
    return db_query($cxn,$sql);
}
function ses_destroy($id)
{
    global $cxn;
     
    $id = mysql_real_escape_string($id);
    $sql = "DELETE FROM sessions WHERE id = '$id'";
    return db_query($cxn,$sql);
}

function ses_clean($max)
{
    global $cxn;
     
    $old = time() - $max;
    $old = mysql_real_escape_string($old);
    $sql = "DELETE FROM sessions WHERE access < '$old'"; 
    return db_query($cxn,$sql);
}
session_set_save_handler('ses_open','ses_close','ses_read','ses_write','ses_destroy','ses_clean');

کد های مربوط به ایجاد اتصال به پایگاه داده:

PHP:
function db_connect()
{
    global $cxn;
    $cxn=mysqli_connect('localhost','user','852','test') or die ("امکان انجام درخواست شما وجود ندارد، لطفا مجددا تلاش کنيد");
    return $cxn;
}
function db_query($cxn, $sql)
{
    mysqli_set_charset($cxn, "utf8") or die("امکان انجام درخواست شما وجود ندارد، لطفا مجددا تلاش کنيد". mysqli_error($cxn));
    $result = mysqli_query($cxn,$sql) or die("امکان انجام درخواست شما وجود ندارد، لطفا مجددا تلاش کنيد". mysqli_error($cxn));
    return $result;
}

کد ایجاد جدول:

PHP:
CREATE TABLE IF NOT EXISTS `sessions` (
  `id` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `data` text COLLATE utf8_unicode_ci NOT NULL,
  `access` datetime NOT NULL,
  `hash` char(40) COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
آخرین ویرایش:

i-php-i

Active Member
توی تابع db_connect یه اتصال با دیتابیس ایجاد می کنم و متغیر $cxn رو بصورت گلوبال تعریف می کنم.

فکر کنم مشکل از همینجا بوجود می یاد.

لطفا راهنمایی کنید.
 
آخرین ویرایش:

Masoud1365

مدیر انجمن
نیاز نیست که گلوبال تعریف کنید ! ( من کدهاتون رو نخوندم ! )
این تابع db_connect که شما نوشتید تابع بازگشتی هست ! به این صورت هم تعریف کنید جواب میده !
PHP:
$con = db_conect();
 

i-php-i

Active Member
نیاز نیست که گلوبال تعریف کنید ! ( من کدهاتون رو نخوندم ! )
این تابع db_connect که شما نوشتید تابع بازگشتی هست ! به این صورت هم تعریف کنید جواب میده !
PHP:
$con = db_conect();

مشکل تابع بخاطر توابع اتصال به پایگاه داده هست اما نمی دونم دلیل اصلیش چی هست.
 

جدیدترین ارسال ها

بالا