session高级(session入库)

咱们知道,session是一种会话技术,用来实现跨脚本共享数据。php

在以前的php会话技术中咱们介绍过,session是存放在服务器端的文件里的,所以session有可能由于文件数量过多,会在查询session文件以及读取的时候产生压力。通常咱们有三种解决方案mysql

1.使用文件分层(缺点:I/O操做是系统的一个瓶颈,即便分层也不能避免此问题)sql

2.将session放入数据库数据库

3.将session放在内存中(非关系性数据库)(缺点:对服务器内存要求教高)数组

所以咱们选用一个折中的办法,将session存入mysql数据库,也就是咱们要讲的重点,服务器

session入库技术:session

要实现session入库,首先咱们要了解session 机制:函数

什么是session机制:fetch

在php中,session能够理解为一套单独的小系统,在该系统中有不少关于session的处理方法,用来解决各类问题,用户只须要在session以外,调用session_start函数(session系统的一个接口)spa

其余操做都是session系统帮忙去处理

由图可知咱们应该修改session机制中的session的读取和最终的写入。
要修改session机制要借助一个系统函数
session_set_save_handler():用来使用外部用户定义的函数,来取代session系统自己的函数。
session_set_save_handler(开启session机制函数,关闭session机制函数,读取session数据函数,写入session函数,销毁session函数,后手过时session函数)。
所以咱们要准备六个函数。
代码实现:
<?php     //session入库     //觉得修改session机制必须借助session_set_save_handler()函数,该函数须要6个能够调用的回调函数,所以须要建立6我的对应的函数     //1.开启session机制     function sess_open()     {         //开启资源         //链接数据库         mysql_connect('localhost','root','');         mysql_query('set names utf8');         mysql_query('use session');         echo __FUNCTION__,'<br/>';     }     //2.关闭session         function sess_close()     {         //关闭资源         mysql_close();         echo __FUNCTION__,'<br/>';     }     //3.读取session     function sess_read($sess_id)     {         //从数据库读取数据         //根据sess_id(由系统提供)获取数据         //读数据时要过滤掉过时的数据         $expire=time()-ini_get('session.gc_maxlifetime');         $sql="selsct * from session where sess_id='{$sess_id}' and sess_expire>='{$expire}'";         $res=mysql_query($sql);         //获得的是一个数组         if($sess=@mysql_fetch_assoc($res))         {             //获得一个序列化后的字符串             //要进行反序列化,read只负责读取数据,不负责加工数据             return $sess['sess_info'];         }         echo __FUNCTION__,'<br/>';     }     //4.写入session     function sess_write($sess_id,$sess_info)     {         //向数据库中写入数据         $time=time();         $sql="replace into session values('{$sess_id}','{$sess_info}','{$time}')";         mysql_query($sql);         echo __FUNCTION__,'<br/>';     }     //5.销毁session     function sess_destroy($sess_id)     {                  $sql="delete from session where sess_id='{$sess_id}'";         return mysql_query($sql);         echo __FUNCTION__,'<br/>';     }     //6.回收session     function sess_gc()     {         //从数据库删除过时的session数据         //判断session是否过时,过时的删除         $expire=ini_get('session.gc_maxlifetime');         //获得最迟的时间,在$expire以前的都是过时的         $expire=time()-$expire;         $sql="delete from session where sess_expire < '{expire}'";         return mysql_query($sql);         echo __FUNCTION__,'<br/>';     }     //使用session_set_save_handler()修改session机制     session_set_save_handler('sess_open','sess_close','sess_read','sess_write','sess_destroy','sess_gc');     //想要使用session,必需要用session_start()来开启     session_start();     $_SESSION['name']='wangqixing';     $_SESSION['age']='23';     //session_destroy();
相关文章
相关标签/搜索