基于会话的PHP数据库交互实例
本文演示了基于会话来实现数据库交互的PHP类:< PHP
*会话数据库存储类
* /
会话类{
私有静态session_id = 0美元;
私有静态session_data美元=阵();
私有静态is_update美元= false;
私有静态is_del美元= false;
私有静态is_gc美元= false;
私有静态$ DBO = null; / /数据库连接句柄
私有静态gc_max_time = 1440美元;
私有静态$表= 'sessions;
私有静态pre_key美元= 'weige '; / /会话密钥
HA的使用
私有静态gc_rate_de美元= 100; / /对分母代表
私有静态gc_rate_co美元= 20; / /代表分子
私有静态路径= / ;保存路径
私有静态域=空;
私有静态
静态类美元= false; / /默认
*获取数据库句柄
* /
私有静态函数打开()
{
如果(!自::$ dbo)
{
自::::DBO =分贝美元工厂();
}
返回true;
}
*设置
**
公共静态函数集($,$ = NULL)
{
自我::打开();
$;
如果($ = false)
{
$ =数组();
}
如果(!瓦尔is_array美元(美元关键))
{
$数据键;
}
如果(Val is_string美元(美元关键))
{
$;
}
自我::写($数据);
自;
}
*获得价值
*
* /
公共静态函数获取($ = NULL){
自我::打开();
自::::session_data美元=自我阅读();
美元=;
如果(!$键){
美元:美元session_data ret =自我;
} else if(is_array(自::session_data美元isset()::session_data美元{ $关键})){
美元:美元ret =自我:session_data { $关键};
}
自我::更新();
自;
返回$;
}
*删除或重置
**
公共静态函数del(key)
{
如果(!自::is_del美元)
{
自我::打开();
$ =;
如果(isset($瓦尔{ $关键}))
{
撤消($瓦尔{ $关键});
}
session_id美元=自我::session_id美元;
session_data美元=连载(美元值);
session_expire美元=时间+自我::get_gc_maxtime();
自::$ DBO ->查询(更新。自::$表。设定值==session_data美元,美元在到期session_expire session_id =session_id美元);
自;
}
自::is_del美元=真;
}
*破坏
*
**
公共静态函数销毁()
{
session_id美元=自我::get_session_id();
_cookie美元{ 'wbsid} =;
自我::打开();
自::$ DBO ->查询(删除。自::$表。在session_id =session_id美元);
自;
}
*读私立
**
私有静态函数读()
{
session_id美元=自我::session_id美元;
如果(!session_id美元){
session_id美元=自我::get_session_id();
}
如果(!session_id美元)()返回的数组;
user_agent美元= isset($ _server { 'http_user_agent ' })MD5($ _server { 'http_user_agent ' }):;
client_ip美元=乐趣::getip();
session_expire美元=时间自我::get_gc_maxtime();
RS =自我:美元:美元DBO -> fetchrow(选择session_id,价值,代理IP。自::$表。
在session_id = $ session_id'and到期>的session_expire美元);
如果美元美元(RS RS { 'agent'} user_agent美元| |!!= | | RS 'ip'} {美元!= $ client_ip)
{
返回false;
}
自::session_id美元美元'session_id'} { = RS;
返回序列化(美元币值的RS { });
}
*会话写入私有
**
静态函数写(数组session_data)
{
session_id美元=自我::session_id美元;
如果(!session_id美元)
{
session_id美元=自我::get_session_id();
}
session_expire美元=时间+自我::get_gc_maxtime();
user_agent美元= isset($ _server { 'http_user_agent ' })MD5($ _server { 'http_user_agent ' }):;
client_ip美元=乐趣::getip();
session_data美元=连载($ session_data);
如果(自::::session_id美元美元美元自session_id = session_id)
{
自::$ DBO ->查询(更新。自::$表。设定值==session_data美元,到期session_expire美元,代理=user_agent美元,IP =client_ip美元,IP =client_ip美元)。
}
其他的
{
自::session_id美元=美元session_id =自我::create_session_id();
自::$ DBO ->查询(插入。自::$表。(session_id,价值,到期,代理IP)
价值(美元session_id ',' session_data美元,美元的session_expire ',' user_agent美元,美元的client_ip '));
}
返回true;
}
*会话更新私有
**
私有静态函数更新()
{
如果(!自::is_update美元)
{
session_id美元=自我::session_id美元;
session_expire美元=时间+自我::get_gc_maxtime();
自::$ DBO ->查询(更新。自::$表。设置到期= $ session_expire'where session_id =session_id美元);
}
自::is_update美元=真;
}
私有静态函数关闭()
{
如果(自::is_gc美元!mt_rand(1,自我,自我gc_rate_de美元)%::gc_rate_co = = 0美元)
{
自我::GC();
}
自::is_gc美元=真;
}
*过期会话清除随机触发器
**
私有静态函数GC()
{
session_expire美元=时间自我::get_gc_maxtime();
自::$ DBO ->查询(删除。自::$表。在到期的<< session_expire美元);
}
静态函数get_session_id()
{
如果(isset($ _cookie { 'wbsid ' })strlen($ _cookie { 'wbsid ' })= = 32)
{
$ SID = _cookie美元'wbsid'} {;
setcookie('wbsid,希德美元,时间+自我::get_gc_maxtime(),::::美元$路径,自域,自::$安全。
返回$ SID;
}
返回null;
}
静态函数create_session_id()
{
$ SID =自我::get_session_id();
如果(!$ SID)
{
$ SID =乐趣::getip()。时间。瞬时(真的)。mt_rand(mt_rand(0, 100),mt_rand(100000, 90000000));
$ SID = MD5(自::pre_key美元。希德);
setcookie('wbsid,substr($ SID,0, 32),时间+自我::get_gc_maxtime(),::::美元$路径,自域,自::get_gc_maxtime);
}
返回$ SID;
}
公共静态函数get_gc_maxtime()
{
回归自我::gc_max_time美元;
}
}
希望本文能对大家的PHP程序设计有所帮助。