php中session入库(mysql)机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中session入库(mysql)机制相关的知识,希望对你有一定的参考价值。

seesion的入库(mysql)操作,主要是修改seesion的读取与写入操作

主要是通过 bool session_set_save_handler(seesion_open,seesion_close,session_read,session_write,session_destory,session_gc);

依次对应的是开启seesion连接方式,关闭session,读取session,写拉seesion,销毁session,seesion的垃圾加收机制。

基本实例项目

 

 1 <?php
 2     /*
 3     * 创建数据库
 4     drop DATABASE if EXISTS session;
 5     create DATABASE session CHARSET utf8;
 6     use session;
 7     drop TABLE if EXISTS session;
 8     create table session (
 9     sess_id char(32) UNIQUE NOT NULL,
10     sess_info text,
11     sess_expire int not null default 0
12     )CHARSET utf8 ENGINE INNODB;
13     */
14     //session入库
15     //1. 开启session
16     function sess_open(){
17         //连接mysql
18         mysql_connect(‘localhost‘,‘root‘,‘root‘);
19         mysql_query(‘set names utf8‘);
20         mysql_query(‘use session‘);
21         //查看当前调用了什么方法
22         echo __FUNCTION__.‘<br/>‘;
23     }
24     //2. 关闭session
25     function sess_close(){
26         //关闭mysql
27         mysql_close();
28         echo __FUNCTION__.‘<br/>‘;
29     }
30     //3. 读取session
31     function sess_read($sess_id){
32         //从数据库读取
33         //echo $sess_id;  //这个sess_id,是系统自动生成的
34         //在读取数据的时候我们要过滤掉过期的数据
35         //通过当前时间与系统的session最大周期的差
36         $expire = time() - ini_get(‘seesion.gc_maxlifetime‘);
37         $sql = "select * from session where sess_id = ‘{$sess_id}‘ and sess_expire >= ‘{$expire}‘";
38         $res = mysql_query($sql);
39         echo __FUNCTION__.‘<br/>‘;
40         //得到一个数组
41         if($sess = mysql_fetch_assoc($res)){
42             return $sess[‘sess_info‘];
43         }
44     }
45     // 4.写入操作
46     function sess_write($sess_id,$sess_info){
47         //向数据库中写入session
48         //echo $sess_id.$sess_info;
49         $time = time();
50         $sql = ‘replace into session values(‘{$sess_id}‘,‘{$sess_info}‘,‘{$time}‘)‘;//使用replace主是要因为要重复修改seesion,而sess_id又是UNIQUE
51         echo __FUNCTION__.‘<br>‘;
52         return mysql_query($sql);
53     }
54     //5. 销毁
55     function sess_destroy($sess_id){
56         //删除数据库中信息
57         $sql = "delete from session where sess_id = ‘{$sess_id}‘";
58         echo __FUNCTION__.‘<br>‘;
59         return mysql_query($sql);
60     }
61     //6.回收
62     function sess_gc(){
63         //删除过期的数据
64         $expire = time()-ini_get(‘session.gc_maxlifetime‘);
65         $sql = "delete from session where sess_expire < ‘{$expire}‘";
66         echo __FUNCTION__.‘<br/>‘;
67     }
68     //修改session机制
69 
70     session_set_save_handler($sess_open,$sess_close,$sess_read,$sess_write,$sess_destroy,$sess_gc);
71     //启动session
72     session_start();
73     //加入session数据
74     $_SESSION[‘name‘] = ‘张三‘;
75     $_SESSION[‘age‘]  = ‘25‘;
76     //查看数据
77     //var_dump($_SESSION);
78     //删除session
79     //session_destroy();

 

以上是关于php中session入库(mysql)机制的主要内容,如果未能解决你的问题,请参考以下文章

Session 入库

php实现session入库

NGINX实现负载均衡,并利用PHP实现session入库

php中session的生成机制回收机制和存储机制探究

redis 队列缓存 + mysql 批量入库 + php 离线整合

redis缓存队列+MySQL +php任务脚本定时批量入库