برای چندمین با این مشکل رو دارم مطرح می کنم. مشکل با سسشن ها

i-php-i

Active Member
من براي ذخيره سسشن ها توي ديتابيس از session_set_save_handler استفاده مي کنم. موقع استارت کردن سسشن، با خطاي زير مواجه مي شم. چه طور بايد مشکل رو حل کنم؟

PHP:
 mysqli_close() expects parameter 1 to be mysqli, null given in

این خطا به این دلیله که توابع نمی تونن لینک اتصال به پایگاه داده (متغیر cxn) رو بکار ببرن و نال دریافت می کنن.

اگر شرط زیر رو به هر شش تابع اضافه کنم، مشکل حل می شه.

PHP:
if(!$cxn)
{
$cxn=mysqli_connect('myhost','myuser','mypass','mydb');
}

توابع مورد استفاده (بايد بگم که براي خلاصه کردن مطلب، کد هاي غير ضروري رو حذف کردم):


PHP:
global $cxn;
$cxn=mysqli_connect('myhost','myuser','mypass','mydb');
function ses_open($cxn)
{
    if($cxn)
    {
        return $cxn;
    }
    else
    {
        return false;
    }
}
 
function ses_close()
{
    return mysqli_close($cxn);
}

function ses_read($id)
{
    $sql = "SELECT data FROM sessions WHERE id = '$id'";
    if ($result = mysql_query($sql))
    {
        if (mysqli_num_rows($result))
        {
            $record = mysqli_fetch_assoc($result);
            return $record['data'];
        }
}

function ses_write($id, $data)
{
    $access = time();
    $sql="INSERT INTO sessions (id,data,access) VALUES ('$id','$data','$access')
    ON DUPLICATE KEY UPDATE  id='$id', data='$data', access='$access'";
    return mysql_query($sql);
}
function ses_destroy($id)
{
    $id = mysql_real_escape_string($id);
    $sql = "DELETE FROM sessions WHERE id = '$id'";
    return mysqli_query($cxn,$sql);
}

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

i-php-i

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

PHP:
if(!$cxn)
{
$cxn=mysqli_connect('myhost','myuser','mypass','mydb');
}

اگر توی هر تابع از شرط فوق استفاده نکنم هشدار زیر نمایش داده می شه. چطور باید این مشکل رو حل کنم تا بتونم سسشن ها رو توی دیتابیس ذخیره کنم؟

PHP:
  		 			 mysqli_close() expects parameter 1 to be mysqli, null given in

لطفا یه راه حل ارائه بدید.
 

MMSHFE

Active Member
با سلام، دوست گرامي يك بار خارج از توابع cxn$ رو تعريف كنيد و داخل توابع دستور ;global $cxn رو بنويسيد تا بتونين ازش استفاده كنين.
موفق باشيد.
 

i-php-i

Active Member
با سلام، دوست گرامي يك بار خارج از توابع cxn$ رو تعريف كنيد و داخل توابع دستور ;global $cxn رو بنويسيد تا بتونين ازش استفاده كنين.
موفق باشيد.

مشکل حل شد.

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

یه سوال: وقتی که از این توابع استفاده می کنم و سسشن رو توی دیتابیس ذخیره می کنم، توابع مروبط به سسشن توی هر صفحه یبار اتصال به دیتابیس رو باز می کنن و اگر هم خودم بخوام از دیتابیس داده ای بخونم، باید یه اتصال دیگه بوجود بیارم.

چطور باید این مشکل رو حل کنم؟
 

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

بالا