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();
时间: 2024-08-24 11:19:02

php中session入库(mysql)机制的相关文章

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

1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问,我们都知道session是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?这个时候就得借助cookie了.当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件.sessio

转:django中session的实现机制

转:www.jianshu.com 要理解session,首先要搞清楚cookie的概念.由于http是无状态的,服务器不能记住用户的信息状态,因此若由同一个客户端发起的多条请求,服务器不能辨别这些请求来自哪个用户.http无状态的限制为web应用程序的设计带来了许多不便,购物网站中的"购物车"功能就是一个很好的例子,当用户把商品放进购物车后,客户端必须要保存购物车的状态,否则当用户下次浏览网站时,购物车拥有的商品状态便不复存在.客户端和服务器必须有通信的媒介,方便服务器追踪客户端的状

.net mvc中session的锁机制

今天遇到个奇怪的问题, 一个秒杀商品系统, 大量秒杀请求进来, 到了action居然是单线程执行! 这样产生的效果就是"这个系统好慢啊!!". 可是我没有加lock,为什么会变成单线程执行呢? 找资料才知道, session有个锁机制. 资料内容: 和数据库的锁一样, 分共享锁和排它锁. 共享锁占用时,排它锁必须等待,而另一个共享锁可以同事访问: 排它锁占用时,其他所有锁都必须等待. 两个锁的持续时间都是整个action走完才释放.类似于Repeatable以上的事务隔离级别. 而我的

深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现

1.session的注意点:@session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] session_start()前的输出问题:[session信息本身会增加到http头信息,也就是http主体不能在头前]对php.ini中的输出缓存进行配置,out_buffer的配置[注意:开启之后能够保证输出内容在脚本中缓存] [注意](1)脚本中session变量的键只能是字符串类型的[$_SE

Session机制详解及分布式中Session共享解决方案

一.为什么要产生Session http协议本身是无状态的,客户端只需要向服务器请求下载内容,客户端和服务器都不记录彼此的历史信息,每一次请求都是独立的. 为什么是无状态的呢?因为浏览器与服务器是使用socke套接字进行通信,服务器将请求结果返回给浏览器之后,会关闭当前的socket链接,而且服务器也会在处理页面完毕之后销毁页面对象. 然而在Web应用的很多场景下需要维护用户状态才能正常工作(是否登录等),或者说提供便捷(记住密码,浏览历史等),状态的保持就是一个很重要的功能.因此在web应用开

php中session机制的详解

[读了下面的文章转载的文章后自己的理解]: 1,通过phpinfo()函数可以查看到session.save_path的具体位置,即服务器session文件的存储位置. 2,php中当启用session_start()之后会在服务器端session.save_path创建一个session文件.文件名包含每个用户唯一的session_id;   session数据从一个页面传递到另一个页面,实际上传递的是一个名字叫phpsessid的cookie到服务器.   服务器接收到这个cookie之后就

session 入库的实现

随着 session 的增加,管理已经不方便.这时,考虑使用 mysql 数据库管理.建立一个表管理 session . 更改 session 的存储机制,让 session 不再存在文件中,而是入库.更该存储机制,只需要在文件中增加函数 session_set_save_handler() 便可.代码如下: // 重写 session 的存储机制 function sess_open(){ echo __FUNCTION__; } function sess_close(){ echo __F

Session 入库

session入库 session机制中的数据分部分存储,1部分在客户端的cookie中,2部分在服务器端的session文件中. 务器端的session文件中存储的是$_SESSION变量中的数据. session入库就是将$_SESSION中的数据存在数据库中 对session的操作 session_start(); $_SESSION['名'] session_destroy(); ? ? ? 修改session机制 session_set_save_handler ( string op

php重写session的存储机制

重写session的存储机制 Session数据区 默认以 文件的形式存储与服务器操作系统临时目录中! 当 session数据区过多时,文件形式的存储,操作速度变慢.磁盘的读写(IO,input/output)开销是很大的. 实际项目中,都会采用其他的方式更快地存储session数据.典型的办法:数据库,内存. 以 数据库存储为例,讲解:session数据入库! 重写 与 session数据区直接的相关操作即可: 最基本的只有2个:读,写! 一:定义2个可以完成读和写的函数. 二:告知sessi