PHP中SESSION自定义会话管理器

<?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();

时间: 2024-10-10 12:27:58

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

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

DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章节. 集群增量会话管理器的职责是将某节点的会话该变同步到集群内其他成员节点上,它属于全节点复制模式,所谓全节点复制是指集群中某个节点的状态变化后需要同步到集群中剩余的节点,非全节点方式可能只是同步到其中某个或若干节点.在集群中全节点会话复制的一个大致步骤如下图所示,客户端发起一个请求,假设通过一定的

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

前面提到的标准会话管理器已经提供了基础的会话管理功能,但在持久化方面做得还是不够,或者说在某些情景下无法满足要求,例如把会话以文件或数据库形式存储到存储介质中,这些都是标准会话管理器无法做到的,于是另外一种会话管理器被设计出来--持久化会话管理器. 在分析持久化会话管理器之前不妨先了解另外一个抽象概念会话存储设备Store,引入这个概念是为了更清晰方便地实现各种会话存储方式.作为存储设备最重要的操作无非就是读写操作,读即是将会话从存储设备加载到内存中,而写则将会话写入存储设备中,所以定义了两个重

session management会话管理的原理

web请求与响应基于http,而http是无状态协议.所以我们为了跨越多个请求保留用户的状态,需要利用某种工具帮助我们记录与识别每一次请求及请求的其他信息.举个栗子,我们在淘宝购物的时候,首先添加了一本<C++ primer>进入购物车,然后我们又继续去搜索<thinking in java>,继续添加购物车,这时购物车应该有两本书.但如果我们不采取session management会话管理的话,基于http无状态协议,我们在第二次向购物车发出添加请求时,他是无法知道我们第一次添

跟我一起学WCF(8)——WCF中Session、实例管理详解

一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独自的业务逻辑以Service的形式进行封装,调用者通过消息(Messaging)的方式来调用服务.对于承载某个业务功能实现的服务应该具有上下文(Context)无关性,意思就是说构造服务的操作(Operation)不应该绑定到具体的调用上下文,对于任何的调用,具有什么的样输入就会对应怎样的输出.因为

[ASP.NET][Session] 使用会话管理解决 Session 丢失问题

使用会话管理解决 Session 丢失问题 步骤 1.在 CMD 中输入命令 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 再执行 语法:aspnet_regsql.exe -S 服务器ip -U 数据库登录名 -P 数据库密码 -d 所要放入的数据库 -ssadd -sstype c 实例:aspnet_regsql.exe -S localhost -U sa -P 123456 -d ZSZ -ssadd -sstype c 执行成功的结

Qt之自定义布局管理器(QCardLayout)

简述 手动布局另一种方法是通过继承QLayout类编写自己的布局管理器. 下面我们详细来举一个例子-QCardLayout.它由同名的Java布局管理器启发而来.也被称之为卡片布局,每个项目偏移QLayout::spacing(). 简述 定义 实现 效果 源码 定义 编写自己的布局,必须定义如下: 一种存储布局处理项目的数据结构,每个项目都是一个QLayoutItem,本例使用QList. addItem() 如何添加项目布局. setGeometry() 如何控制布局. sizeHint()

django ORM中的RelatedManager(关联管理器)

关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) # print(author_obj) #<Author object: 1 吴晓波> # print(author_obj.book_set.all()) #出版过的所有的书 <QuerySet [<Book: 小王子>, <Book: 哈利波特>]> 在反向

七:使用Session进行会话管理

一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务. 二.Session和Cookie的主要区别 Cookie是把用户的数据写给用户的浏览器. Session技术把用户的数据写到用户独占的sess

android中常用的布局管理器

Android中的几种常用的布局,主要介绍内容有: View视图 RelativeLayout    相对布局管理器 LinearLayout     线性布局管理器 FrameLayout     真布局管理器 TableLayout     表格布局管理器 GridLayout     网格布局管理器 (1) View在XML文件中的常用属性定义: layout_margin:指定该视图与周围视图之间的空白距离(包括上下左右),(可分别写成layout_marginTop.layout_ma