<?php
class CustomSession implements SessionHandlerInterface{
private $link;
private $lifetime;
public function open($savePath,$session_name){
$this->lifetime=get_cfg_var('session.gc_maxlifetime');
$this->link=mysqli_connect('localhost','root','root','session_test');
mysqli_query($this->link,"SET names UTF8");
if($this->link){
return true;
}
return false;
}
public function close(){
mysqli_close($this->link);
return true;
}
public function read($session_id){
$sql="SELECT *from sessions where session_id='{$session_id}'
and session_expires >".time();
$result=mysqli_query($this->link,$sql);
if(mysqli_num_rows($result)){
return mysqli_fetch_array($result)['session_data'];
}
return "";
}
public function write($session_id,$session_data){
$newExp=time()+$this->lifetime;
//首先查询是否存在指定的session_id,如果存在相当于更新数据,否则是第一次,则写入数据
$sql="SELECT * from sessions where session_id={'$session_id'}";
$result=mysqli_query($this->link,$sql);
if(mysqli_num_rows($result)==1){
$sql="UPDATE sessions set session_expires='{$newExp}',session_data='{$session_data}'
where session_id='{$session_id}' ";
}else{
$sql="INSERT into sessions values('{$session_id}','$session_data','{$newExp}')";
}
mysqli_query($this->link,$sql);
return mysqli_affected_rows($this->link)==1; }
public function destroy($session_id){
$sql="DELETE from sessions where session_id='{$session_id}'";
mysqli_query($this->link,$sql);
return mysqli_affected_rows($this->link)==1;
}
public function gc($maxlifetime){
$sql="DELETE from sessions where session_expires<".time();
mysqli_query($this->link,$sql);
if(mysqli_affected_rows($this->link)>0){
return true;
}
return false;
}
}
<?php
header("Content-type:text/html;charset=utf-8");
require_once 'customSession.php';
$customSession=new CustomSession();
ini_set('session.save_handler', 'user');
session_set_save_handler($customSession,true);
session_start();
$_SESSION['name']='admin';
$_SESSION['pwd']='123456';
//销毁会话,从数据库中删除
<?php
require_once 'customSession.php';
$customSession=new CustomSession();
ini_set('session.save_handler', 'user');
session_set_save_handler($customSession,true);
session_start();
session_destroy();

PHP中SESSION自定义会话管理器的更多相关文章

  1. win2008以上的系统,在vmware esxi5.5里怎么使用自定义规范管理器?sysprep

    经过测试,原来08以上的系统自带了sysprep.exe,所以vcenter对08以上的系统直接使用自定义规范管理器即可,跟linux一样了.注意不要跟03一样写入了sn即可. vCenter可使用s ...

  2. Django中自定义模型管理器(Manager)及方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager.每个Django模型至少有一个ma ...

  3. tomcat会话之持久化会话管理器

    前面提到的标准会话管理器已经提供了基础的会话管理功能,但在持久化方面做得还是不够,或者说在某些情景下无法满足要求,例如把会话以文件或数据库形式存储到存储介质中,这些都是标准会话管理器无法做到的,于是另 ...

  4. 集群增量会话管理器——DeltaManager

    DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章 ...

  5. 标准会话管理器——StandardManager

    用于保存状态的会话对象已经有了,现在就需要一个管理器来管理所有会话,例如会话id生成.根据会话id找出对应的会话.对于过期的会话进行销毁等等操作.用一句话描述标准会话管理器:提供一个专门管理某个web ...

  6. xshell 会话管理器快捷键

    有没有发现xshell6关闭左边的会话管理器以后,打开就比较麻烦 那么可以自定义一个快捷键来打开: 然后输入一个快捷键 类型选择 菜单-->然后找会话管理器 完事儿 也可以自定义其他快捷键.自己 ...

  7. Django 自定义模型管理器(Manager)及方法

    转载自:https://www.cnblogs.com/sui776265233/p/11571418.html 1.自定义管理器(Manager) 在语句Book.objects.all()中,ob ...

  8. VS2013中Nuget程序包管理器控制台使用入门(三)-项目实战(原创)

    VS2013中Nuget程序包管理器控制台使用入门(三)-项目实战 1.给指定项目安装Newtonsoft.Json ,Version 4.5.11 PM> Install-Package Ne ...

  9. asp.net微信开发第三篇----自定义会话管理

    和微信用户的沟通少不了,总觉得看起来微信官网后台管理中的会话回复消息有点呆板,所以我这里就自定义了一个会话管理功能,最终效果图如下: 因为我试使用富文本文件CKEDITOR来进行编写,你看到稳中可能会 ...

随机推荐

  1. 2017-2018-2 java红茶第二周作业

    详见团队博客:http://www.cnblogs.com/javahc/p/9033816.html

  2. golang学习笔记6 beego项目路由设置

    golang学习笔记5 beego项目路由设置 前面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,那么是如何运行起来的呢?让我们从入口文件先分析起来吧: package main ...

  3. [转载]CSS教程--字体与文本属性

    b>font-family功能:用于改变HTML标志或元素的字体,你可设置一个可用字体清单.浏览器由前向后选用字体.语法:{font-family:字体1,字体2, ... ,字体n} font ...

  4. 怎样从外网访问内网RESTful API?

    本地部署了RESTful API,只能在局域网内访问,怎样从外网也能访问到本地的RESTful API呢?本文将介绍具体的实现步骤. 准备工作 部署并启动RESTful API服务端 默认部署的RES ...

  5. 自定义schema 流程

    参考 https://www.cnblogs.com/googlemeoften/p/5746684.html

  6. Oracle初级第一天

    oracle卸载 运行regedit,删除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ ...

  7. Java学习笔记之linux配置java环境变量(三种环境变量)

    0x00 压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车 ...

  8. 两步完成利用procdump64+mimikatz获取win用户密码

    使用procdump64+mimikatz可实现从内存中获取明文密码 工具 链接:https://pan.baidu.com/s/1gNc9qLcNSNBohIVrAiqShw 密码:fc38 首先得 ...

  9. [c/c++] programming之路(6)、ASCII码,数据类型、随机数、字符转换及拼接等

    一.变量 #include<stdio.h> #include<stdlib.h> void main0(){ //数据使用必须在范围内,否则产生溢出 unsigned +;/ ...

  10. Spring 学习——Spring IOC概念

    Spring IOC 接口及面向接口编程 接口 定义及理解:接口是一个类的抽象声明,用于由内部操作分离出外部沟通的方式,使其内部进行修改而不影响其外部连接沟通的一种交互方式.不对外公开逻辑处理,只是返 ...