session 入库的实现

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

// 重写 session 的存储机制

function sess_open(){

echo __FUNCTION__;

}

function sess_close(){

echo __FUNCTION__;

}

function sess_read($sess_id){

echo __FUNCTION__;

}

function sess_write($sess_id, $sess_data){

echo __FUNCTION__;

}

function sess_destroy(){

echo __FUNCTION__;

}

function sess_gc(){

echo __FUNCTION__;

}

session_set_save_handler(

‘sess_open‘,

‘sess_close‘,

‘sess_read‘,

‘sess_write‘,

‘sess_destroy‘,

‘sess_gc‘

);

session_start();

这要写了 session_set_save_handler() ,php 就知道要更改 session 的存储机制了。如果没写,那还是存到文件中。这函数的参数,分别对应了 session 运行机制的各个方面。参数名字,也就是函数名,可以改变,不一定这样写,这样写是为了便于阅读理解。 执行顺序也不是从上到下,而是:open -> reader -> write -> close .

————————————————————————————————————

数据库表 session 信息:

实现 session 入库功能的完整代码:

 

// 重写 session 的存储机制

// 最重要的三个函数: read,write,destroy 。

// 有了这几个就能完成 session 功能。

// 其他的函数的函数体可以什么都不写。

function sess_open(){

echo __FUNCTION__;

$link = mysql_connect(‘127.0.0.1‘, ‘root‘, ‘‘);

mysql_query(‘set names utf8‘);

mysql_query(‘use study‘);

}

function sess_close(){

echo __FUNCTION__;

}

function sess_read($sess_id){

echo __FUNCTION__;

$sql = "select sess_data from `session` where sess_id = ‘$sess_id‘";

$result = mysql_query($sql);  // $link 可以自己找到,或可以声明为全局变量

if($rows = mysql_fetch_assoc($result)){

return $rows[‘sess_data‘];

}else{

return ‘‘;

}

}

function sess_write($sess_id, $sess_data){

echo __FUNCTION__;

//当前 session 存在则更新 sess_data

//获得时间戳,mysql函数:unix_timestamp();

//获得时间戳,php函数:time();

$sql = "insert into `session` values(‘$sess_id‘, ‘$sess_data‘, now())

on duplicate key update sess_data = ‘$sess_data‘,times = now()";  //这是为了gc()

return mysql_query($sql);

}

function sess_destroy($sess_id){

echo __FUNCTION__;

$sql = "delete from `session` where sess_id = ‘$sess_id‘";

return mysql_query($sql);

}

function sess_gc(){

echo __FUNCTION__;

}

session_set_save_handler(

‘sess_open‘,

‘sess_close‘,

‘sess_read‘,

‘sess_write‘,

‘sess_destroy‘,

‘sess_gc‘

);

session_start();

var_dump($_SESSION);

$_SESSION[‘name‘] = ‘fff‘;

$_SESSION[‘age‘] = ‘24‘;

//session_destroy();

——————————————————————————

总结 session 运行机制:

1. 打开 session 时,语法上执行函数 session_start() ,php 的 session 机制读取浏览器端的 cookie,语法上表示为 $_cookie[‘PHPSESSID‘]。

2. 根据 cookie 找到存储在服务器端的 session 数据。

3. 把 session 数据反序列化,赋值给变量 $_SESSION 。

4. 之后对变量 $_SESSION 的操作都是对变量的操作,不会更新 session 文件。

5. 是否执行了 session_destroy() 函数,如果执行了,那么删除服务器端的 session 文件。

6. 脚本结束时,判断是否有 sessin 文件,或者说是否执行过 session_destroy() 方法。如果没有执行过,则把 $_SESSION 变量中的数据写入到 session 文件中。如果执行过,那么什么也不做。

时间: 2024-10-09 22:42:02

session 入库的实现的相关文章

Session 入库

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

session入库

session_set_save_handler(callback open,callback close,callback read,call write,callback destroy,callback  gc) 各个参数的的执行时机以及使用说明 回调函数 描述 open() 在运行session_start()时执行,该函数的声明需要两个参数,系统会自动的将php.ini中session.save_path选项值传递给第一个参数,将session名自动的传递到第二个参数中,返回true则

深度实现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

php实现session入库

为什么要把session存入数据库?有什么用? 可以:统计在线人数,现实多站点session共享(通行证),控制同个账号登入人数等. 要实现session的入库,有关键的几个基本知识: session.gc_divisor = 100  session.gc_probability = 1 .session.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率.( session.gc_pro

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

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

环境介绍:只有一台Centos 7的服务器,利用docker搭建3台lnmp服务器来测试. Step 1 :利用docker来搭建三台lnmp服务器 docker pull imagine10255/centos6-lnmp-php56 docker run -itd --name lnmp1 -p 8081:80 imagine10255/centos6-lnmp-php56 docker run -itd --name lnmp2 -p 8082:80 imagine10255/centos

PHP 实现Session入库/存入redis

对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库.或者使用Redis KEY-VALUE数据存储方案 首先新建一个session表 CREATE TABLE `sessions` (   `sid` char(40) NOT NULL,   `updatetime` int(20) NOT NULL,   `data` varchar(200) NOT NULL,   UNIQUE KEY `sid` (`sid`) USING HASH ) ENGINE=MEMOR

20150127--Session入库-02

三.整合session入库到MVC项目中 1.设计数据库如下图所示 2.在Core文件夹中创建Session.class.php做为核心入库文件 3.创建Session类 4.创建session入库的6个方法 5.继承Model模型,链接数据库,更改session存取方式 6.由于open与close不需要进行相关操作,可以为其设置默认返回值true 7.read读方法实现 8.write写方法实现 9.destroy删除方法实现 10.gc垃圾回收方法实现 11.在Core/Applicati

20150127--Session入库

和涛哥学习MVC三 目录 和涛哥学习MVC三.......................................................................................................... 1 一.简介...................................................................................................................