عند النظر في مسألة الجلسة، تخليت أخيرًا عن الجلسة:
1. تتم إدارة الجلسة الأصلية باستخدام الملفات. تؤثر جودة نظام الملفات بشكل مباشر على أداء الجلسة، خاصة عندما يكون هناك عدة أشخاص متصلين بالإنترنت في نفس الوقت. هناك حلان: قاعدة البيانات والملف (باستخدام مسار التجزئة).
2. تتميز الجلسة الأصلية بضعف قابلية التوسع والتحكم. لا يفضي إلى التكامل مع نظامي الحالي.
3. عند اختيار قاعدة بيانات، لم أختر sqlite. في المرة الأخيرة التي اختبرت فيها كفاءة sqlite على نظام Win XP، لم تكن جيدة كما كنت أتوقع.
أخيرًا، اخترت جدول الكومة الخاص بـ myql لمعالجة الجلسات، ودمج معالجة الجلسة مع إحصائيات المستخدم عبر الإنترنت.
الكود الموضح أدناه هو مثال خاص بي (لا توجد تفاصيل أخرى، يجب تعديل الاستخدام المحدد وفقًا لذلك)
<؟
/**
* التعامل مع المستخدمين عبر الإنترنت ومحاكاة الجلسات
* إنشاء جدول `webqq_session` (
`sid` char( 32 ) ليس فارغًا،
`uid` Mediumint( 8 ) ليست فارغة،
`اسم المستخدم` شار (80) ليس فارغًا،
`ismember` tinyint( 1 ) ليس فارغًا،
`وقت تسجيل الدخول` int( 10 ) ليس فارغًا،
`activetime` int( 10 ) ليس فارغًا،
المفتاح الأساسي (`sid`)
) المحرك = مجموعة الأحرف الافتراضية = gb2312
* @author:feifengxlq< http://www.phpobject.net > feifengxlq#gmail.com
*@ منذ:2006-10-23
* @ حقوق الطبع والنشر: http://www.phpobject.net
* ملاحظة: يجب دمج استخدام هذا الملف مع ملفات أخرى: مثل تصفية ملفات تعريف الارتباط وبعض الوظائف الأساسية وفئات تشغيل قاعدة البيانات
*/
جلسة صفية
{
فار $mysql;
var $cookie_id='webqq_sid';
فار $session=array();
var $max_time=1200;// الحد الأقصى للوقت الافتراضي هو 20 دقيقة
دالة __ بناء ()
{
$this->mysql=new Module(TB_PREX.'_session');//يتطلب دعمًا خارجيًا
$this->start();
}
بداية الوظيفة ()
{
إذا (فارغ($_COOKIE[$this->cookie_id]))
{
// تهيئة الجلسة
$هذا->إنشاء();
}آخر{
// ملف تعريف الارتباط موجود بالفعل، تحقق مما إذا كان موجودًا في قاعدة البيانات
$sid=$_COOKIE[$this->cookie_id];
إذا($this->mysql->detail('حيث sid=''.$sid.'''))
{
// موجود في قاعدة البيانات
$row['activetime']=time();
$this->mysql->update($row,'where sid=''.$sid.''');
$this->session=$this->mysql->detail('where sid=''.$sid.''');
}آخر{
// غير موجود في قاعدة البيانات
$هذا->إنشاء();
}
}
// احذف المستخدمين غير المتصلين بقاعدة البيانات
$this->mysql->delete('حيث activetime+'.$this->max_time.'<'.time());
}
تسجيل الدالة (اسم $، قيمة $، تحديث $ = خطأ)
{
إذا (array_key_exists($name,$this->session)){
$this->session[$name]=$value;
}
إذا($update)$this->update();
}
تسجيل الوظيفة($name='')
{
إذا(فارغ($name)) يُرجع $this->session;
إذا (array_key_exists($name,$this->session)){
إرجاع $this->session[$name];
}
}
// تحديث معلومات الجلسة في قاعدة البيانات
تحديث الوظيفة ()
{
$row['uid']=$this->session['uid'];
$row['username']=$this->session['username'];
$row['ismember']=$this->session['ismember'];
$row['logintime']=$this->session['logintime'];
$row['activetime']=$this->session['activetime'];
$this->mysql->update($row,'where sid=''.$this->session['sid'].''');
}
/*------------------ فيما يلي طرق خاصة ------------------------- --------------------------------**/
وظيفة إنشاء ()
{
$nowtime=time();
$sid=md5('0'.$nowtime.getip());// يجب تعريف وظيفة getip () مسبقًا: الحصول على عنوان IP الخاص بالعميل
setcookie($this->cookie_id,$sid,$nowtime+3600*24);//افتراضي 24 ساعة
$row['sid']=$sid;
$row['uid']=0;
$row['اسم المستخدم']='ضيف';
$row['ismember']=0;
$row['logintime']=$nowtime;
$row['activetime']=$nowtime;
$this->mysql->add($row);// الكتابة إلى قاعدة البيانات
$this->session=$row;
}
}
?>