من براي ذخيره سسشن ها توي ديتابيس از session_set_save_handler استفاده مي کنم. موقع استارت کردن سسشن، با خطاي زير مواجه مي شم. چه طور بايد مشکل رو حل کنم؟
این خطا به این دلیله که توابع نمی تونن لینک اتصال به پایگاه داده (متغیر cxn) رو بکار ببرن و نال دریافت می کنن.
اگر شرط زیر رو به هر شش تابع اضافه کنم، مشکل حل می شه.
توابع مورد استفاده (بايد بگم که براي خلاصه کردن مطلب، کد هاي غير ضروري رو حذف کردم):
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');