温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php如何基于session实现数据库交互的类

发布时间:2021-08-04 10:08:59 阅读:122 作者:chen 栏目:开发技术
亿速云云数据库,读写分离,安全稳定,弹性扩容,低至0.3元/天!! 点击查看>>

这篇文章主要讲解了“php如何基于session实现数据库交互的类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何基于session实现数据库交互的类”吧!

本文实例讲述了php基于session实现数据库交互的类。分享给大家供大家参考。具体如下:

<?php
/**
 * session 数据库存储类
 */
class Session {
 private static $session_id   0;
 private static $session_data  array();
 private static $is_update   FALSE;
 private static $is_del    FALSE;
 private static $is_gc    FALSE;
 private static $dbo    NULL;  //数据库连接句柄
 private static $gc_max_time  1440;
 private static $table   'sessions';
 private static $pre_key   'weige';//session 密钥
 //捆绑使用哈
 private static $gc_rate_de  100;//代表分母
 private static $gc_rate_co  20;//代表分子
 private static $path   '/';//保存路径
 private static $domain   null//域
 private static $secure   false;//默认
 private static $httponly  false;//默认
 /**
  * 获取数据库句柄 私有
  */
 private static function open() 
 {
  if (!self::$dbo) 
  {
   self::$dbo Db::factory();
  }
  return TRUE;
 }
 /**
  * 设置
  * */
 public static function set($key$val=NULL) 
 {
  self::open();
  $data self::read();
  if ($data === FALSE)
  {
   $data array();
  }
  if (!$val && is_array($key))
  {
   $data $key;
  } 
  else if ($val && is_string($key))
  {
   $data[$key] = $val;
  }
  self::write($data);
  self::close();
 }
 /**
  *获取值 
  * 
  */
 public static function get($key=NULL) {
  self::open();
  self::$session_data self::read();
  $ret '';
  if (!$key) {
   $ret self::$session_data;
  } else if(is_array(self::$session_data) && isset(self::$session_data[$key])) {
   $ret self::$session_data[$key];
  }
  self::update(); 
  self::close();
  return $ret;
 }
 /**
  * 删除或者重置
  * */
 public static function del($key)
 {
  if (!self::$is_del) 
  {
   self::open();
   $val self::read();
   if (isset($val[$key])) 
   {
    unset($val[$key]);
   }
   $session_id  self::$session_id;
   $session_data  serialize($val);
   $session_expire = TIME + self::get_gc_maxtime();
   self::$dbo->query("update ".self::$table." set value='$session_data', expiry='$session_expire' where session_id='$session_id'");
   self::close();
  }
  self::$is_del TRUE;
 }
 /**
  * 销毁
  * 
  * */
 public static function destroy() 
 {
  $session_id   self::get_session_id();
  $_COOKIE['WBSID'] = '';
  self::open();
  self::$dbo->query("delete from ".self::$table." where session_id='$session_id'");
  self::close();
 }
 /**
  * 读取 私有
  * */
 private static function read()
 {
  $session_id self::$session_id;
  if (!$session_id) {
   $session_id self::get_session_id();
  }
  if (!$session_idreturn array();
  $user_agent isset($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : '';
  $client_ip Fun::getIp();
  $session_expire = TIME - self::get_gc_maxtime();
  $rs self::$dbo->fetchRow("select session_id, value, agent, ip from ".self::$table."
   where session_id='$session_id' and expiry>'$session_expire'");
  if (!$rs || $rs['agent'] != $user_agent || $rs['ip'] != $client_ip) 
  {
   return FALSE;
  }
  self::$session_id $rs['session_id'];
  return unserialize($rs['value']);
 }
 /**
  * session 写入 私有
  * */
 private static function write(array $session_data) 
 {
  $session_id self::$session_id;
  if (!$session_id)
  {
   $session_id self::get_session_id();
  }
  $session_expire = TIME + self::get_gc_maxtime();
  $user_agent isset($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : '';
  $client_ip  Fun::getIp();
  $session_data serialize($session_data);
  if (self::$session_id && self::$session_id === $session_id) 
  {
   self::$dbo->query("update ".self::$table." set value='$session_data', expiry='$session_expire', agent='$user_agent', ip='$client_ip' where session_id='$session_id'");
  } 
  else 
  {
   self::$session_id $session_id self::create_session_id();
   self::$dbo->query("insert into ".self::$table."(session_id, value, expiry, agent, ip) 
    values('$session_id', '$session_data', '$session_expire', '$user_agent', '$client_ip')");
  }
  return true;
 }
 /**
  * session 更新 私有
  * */
 private static function update() 
 {
  if (!self::$is_update) 
  {
   $session_id self::$session_id;
   $session_expire = TIME + self::get_gc_maxtime();
   self::$dbo->query("update ".self::$table." set expiry='$session_expire' where session_id='$session_id'");
  }
  self::$is_update TRUE;
 }
 private static function close() 
 {
  if (!self::$is_gc && mt_rand(1self::$gc_rate_de)%self::$gc_rate_co == 0) 
  {
   self::gc();
  }
  self::$is_gc TRUE;
 }
 /**
  * 过期session 清除 随机触发
  * */
 private static function gc() 
 {
  $session_expire = TIME - self::get_gc_maxtime();
   self::$dbo->query("delete from ".self::$table." where expiry<'$session_expire'");
 }
 private static function get_session_id() 
 {
  if (isset($_COOKIE['WBSID']) && strlen($_COOKIE['WBSID'])==32) 
  {
   $sid $_COOKIE['WBSID'];
   setcookie('WBSID'$sid, TIME + self::get_gc_maxtime(), self::$pathself::$domainself::$secureself::$httponly);
   return $sid;
  }
  return null;
 }
 private static function create_session_id() 
 {
  $sid self::get_session_id();
  if (!$sid) 
  {
   $sid Fun::getIp() . TIME . microtime(TRUE) . mt_rand(mt_rand(0100), mt_rand(10000090000000));
   $sid md5(self::$pre_key $sid);
   setcookie('WBSID'substr($sid032), TIME + self::get_gc_maxtime(), self::$pathself::$domainself::$secureself::$httponly);
  }
  return $sid;
 }
 public static function get_gc_maxtime()
 {
  return self::$gc_max_time;
 }
}

感谢各位的阅读,以上就是“php如何基于session实现数据库交互的类”的内容了,经过本文的学习后,相信大家对php如何基于session实现数据库交互的类这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×