/*

*@author Fahy

*数据库为mysql,

*数据库名为session,表名为session,

*表中字段包括PHPSESSID,update_time,client_ip,data

*/

class Session{

private static $handler = null;

private static $ip = null;

private static $lifetime = null;

private static $time = null;

//配置静态变量

private static function init($handler){

self::$handler = $handler; //获取数据库资源

self::$ip = !empty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"]:'unkonw'; //获取客户端ip

self::$lifetime = ini_get('session.gc_maxlifetime'); //获取session生命周期

self::$time = time(); //获取当前时间

}

//调用session_set_save_handler()函数并开启session

static function start($pdo){

self::init($pdo);

session_set_save_handler(

array(__CLASS__,'open'),

array(__CLASS__,'close'),

array(__CLASS__,'read'),

array(__CLASS__,'write'),

array(__CLASS__,'destroy'),

array(__CLASS__,'gc')

);

session_start();

}

public static function open($path,$name){

return true;

}

public static function close(){

return true;

}

//查询数据库中的数据

public static function read($PHPSESSID){

$sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";

$stmt = self::$handler->prepare($sql);

$stmt->execute(array($PHPSESSID));

if(!$result = $stmt->fetch(PDO::FETCH_ASSOC)){

return '';

}

if(self::$ip == $result['client_ip']){

self::destroy($PHPSESSID);

return '';

}

if(($result['update_time']+self::$lifetime)<:>

self::destroy($PHPSESSID);

return '';

}

return $result['data'];

}

/*

*首先查询该session是否存在数据,如果存在,则更新数据,如果不存在,则插入数据

*/

//将session写入数据库中,$data传入session中的keys和values数组

public static function write($PHPSESSID,$data){

$sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";

$stmt = self::$handler->prepare($sql);

$stmt->execute(array($PHPSESSID));

if($result=$stmt->fetch(PDO::FETCH_ASSOC)){

if($result['data'] != $data || self::$time > ($result['update_time']+30)){

$sql = "update session set update_time=?,data=? where PHPSESSID = ?";

$stmt = self::$handler->prepare($sql);

$stmt->execute(array($self::$time,$data,$PHPSESSID));

}

}else{

if(!empty($data)){

try{

$sql = "insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)";

}catch(PDOException $e){

echo $e->getMessage();

}

$sth = self::$handler->prepare($sql);

$sth->execute(array($PHPSESSID,self::$time,self::$ip,$data));

}

}

return true;

}

public static function destroy($PHPSESSID){

$sql = "delete from session where PHPSESSID = ?";

$stmt = self::$handler->prepare($sql);

$stmt->execute(array($PHPSESSID));

return true;

}

public static function gc($lifetime){

$sql = "delete from session where update_time";

$stmt = self::$handler->prepare($sql);

$stmt->execute(array(self::$time-$lifetime));

return true;

}

}

//使用PDO连接数据库

try{

$pdo = new PDO("mysql:host=localhost;dbname=session","root","hwj193");

}catch(PDOException $e){

echo $e->getMessage();

}

//传递数据库资源

Session::start($pdo);

php如何将mysql数据库中的admin字段赋值给session_php实现将Session写入数据库相关推荐

  1. php如何将mysql数据库中的admin字段赋值给session_转php中使用session_set_save_handler()函数把session保存到MySQL数据库实例...

    PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用 uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间 ...

  2. 不同数据库中两列字段相减(某列有空值)

    数据库中两个字段相减(某列有空值)处理方法: sql server中:select (isnull(字段1,0)-isnull(字段2,0)) as 结果 from 表 oracle中:select ...

  3. 如何获取数据库中标的所有字段和数据类型?

    如何获取数据库中标的所有字段和数据类型? 目录 如何获取数据库中标的所有字段和数据类型? #获取表中所有字段

  4. 修改Mysql表中自增字段的初始值

    修改Mysql表中自增字段的初始值: ALTER TABLE employee AUTO_INCREMENT=2; 解释:将表employee自增字段的初始值设置为2

  5. oracle删除字段约束条件,Oracle 数据库中关于对表字段约束的操作(设置、删除、查询)...

    Oracle 数据库中关于对表字段约束的操作(设置.删除.查询) 1. 给表的单个字段加约束 SQL> ALTER TABLE 表名 ADD UNIQUE(字段名); 2. 删除表的单个字段约束 ...

  6. 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句

    如何在sql2005表中直接填写数据? 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句 2011-4-19 14:37 提问者:善良的噜噜修 | 悬赏分:20 | 浏览次数 ...

  7. php session写入数据库_php session 写入数据库,phpsession

    php session 写入数据库,phpsession 本文实例介绍了php session 写入数据库的方法,分享给大家供大家参考,具体内容如下 config = $args; $this-> ...

  8. MySQL数据库中,将一个字段的值分割成多条数据显示

    本文主要记录如何在MySQL数据库中,将一个字符串分割成多条数据显示. 外键有时是以字符串的形式存储,例如 12,13,14 这种,如果以这种形式存储,则不能直接与其他表关联查询,此时就需要将该字段的 ...

  9. java中将date插入mysql中date_JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]...

    1.如何将java.util.Date转化为java.sql.Date? 转化: java.sql.Date sd; java.util.Date ud; //initialize the ud su ...

最新文章

  1. python batch normalization_python – Keras BatchNormalization,样本明智规范化究竟是什么?...
  2. Linux中的清屏命令
  3. centos,yum安装时报错could not retrieve mirrorlist,resolve.conf配置,dns配置错误
  4. oracle 裸设备 ocr,裸设备建立RAC的OCR设备不一致的问题
  5. nginx配置文件中的location中文详解
  6. oracle symonym_Oracle的同义词(synonyms)
  7. 谈谈你对php的收获和不足,我的收获与不足
  8. 持续集成部署Jenkins工作笔记0001---持续集成、持续部署、持续交付的概念
  9. iphone越狱 -- 红雪越狱工具
  10. 505_TextWatcher可以重复添加
  11. 互联网30年,泡沫如梦
  12. 3500常用汉字与标点符号(已排除不支持GB2312的)
  13. floyd与传递闭包
  14. 64位平台C/C++开发注意事项
  15. gRPC-拦截器简单使用
  16. Light Emitting Hindenburg(bitset运用)
  17. html5新年网页做给父母的,给父母的感谢信5篇模板
  18. nodejs、express报错Error[ERR_HTTP_HEADERS_SENT]:Cannot set headers after they are sent to the client
  19. pc端和移动端两套样式在vue中的切换
  20. hcie 论述-mpls lsp

热门文章

  1. 微信小程序里如何使用npm?小程序集成友盟举例
  2. 小程序 遮照 mask 背景透明,里面内容不透明
  3. Postgresql时间处理
  4. 电子信息工程跨考计算机武大,往届从材料跨考武大085208电子与通信工程初试303分 - 考研 - 小木虫 - 学术 科研 互动社区...
  5. Mysql存储结构B树与B+树与索引
  6. 16 | 二分查找(下):如何快速定位IP对应的省份地址?
  7. parrot linux 安装grub,parrotsec 和 kali安装系统的时候出现“executing grub-install dummy”的解决方案...
  8. html菜鸟ruby,Ruby 循环
  9. java桥_java 泛型--桥方法
  10. php额拍戏,像这种会演戏的演员,给我焊在剧组365天拍戏可以吗?