session信息入库
来源:互联网 发布:熔点数据 编辑:程序博客网 时间:2024/04/29 18:17
1、为什么要实现session信息入库?
session入库 重写session制机,在session的周期内,获得到session的数据并记录到数据库,和获得的进程
* 作用: 解决了http超文本传输的无状态无法保存用户信息的问题
*
* Session默认是存放到服务器上的文件中,不方便管理,如果能把session存放到数据库中就可以方便的对数据库进行管理了
* 1、 可以解决跨域操作
* 2、 可以实现单点登录
* 3、 可以统计在线人数
* 4、 可以踢出在线用户
* 5、 可以实现同一时只允许一个用户在线
2、session入库的实现步骤:
使用步骤
* 第一步:在php.ini配置文件中设置session.save_handler = user
* 第二步:创建一个存放session的数据表
* 第三步:实现session入库的回调函数
* 第四步:设置session的处理器,自动调用六个回调函数
* 数据库的设计
* sesssion_id 用于存放session_id的,字段类型为字符型,长度为32
* session_value用于存放session的内容,字段类型为text
* session_MaxLifeTime 用于存放session的生存期
* 实现session的回调函数
* ini_set('session.save_handler','user');
<?php header("content-type:text/html;charset=utf8"); ini_set("session.save_handler","user"); //session.gc_maxlifetime = 1440 垃圾回收时间,session有效期 session_set_save_handler( "open","close","read","write","destroy","gc" ); //在运行session_start()时执行 function open() { //连接数据库 @$link = mysql_connect('127.0.0.1', 'root', 'root'); mysql_query('set names utf8'); mysql_query('use 9yii'); } //在脚本执行完成或调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完后被执行 function close() { mysql_close(); } //在运行session_start()时执行,因为在session_start时,会去read当前session数据 function read($sess_id) { $sql = "select session_data from `session` where session_id = '$sess_id'"; $result = mysql_query($sql); if($rows = mysql_fetch_assoc($result)){ return $rows['session_data']; }else{ return ''; } } //此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行 function write($sess_id,$sess_data) { $sql = "insert into `session` (session_id,session_data,session_time) values('$sess_id','$sess_data', now()) on duplicate key update session_data = '$sess_data' , session_time = now()"; //这是为了gc() return mysql_query($sql); } // 销毁指定session function destroy($sess_id) { echo __FUNCTION__; $sql = "delete from `session` where session_id = '$sess_id'"; return mysql_query($sql); } //执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,session_start会相继执行open,read和gc function gc($sess_id) { // 删除所有过期的session echo __FUNCTION__; $sql = "delete from `session` where now()-session_time > '1440' "; return mysql_query($sql); } session_start();//必须在session_set_save_handler后面执行 $_SESSION['name']='zhangsan'; //echo session_id(); echo $_SESSION['name'];
二
<?php ini_set("session.save_handler","user"); //session.gc_probability = 1 分子 ini_set("session.gc_probability",1); //session.gc_divisor = 1000 分母 ini_set("session.gc_divisor",2); //session.gc_maxlifetime = 1440 垃圾回收时间,session有效期 session_set_save_handler( "open","close","read","write","destroy","gc" ); //连接数据库 function open(){ @$link = mysql_connect('127.0.0.1', 'root', 'root'); mysql_query('set names utf8'); mysql_query('use wangbin'); } function close(){ mysql_close(); } function read($sess_id){ $sql = "select session_data from `session` where session_id = '$sess_id'"; $result = mysql_query($sql); if($rows = mysql_fetch_assoc($result)){ return $rows['session_data']; } else{ return ''; } } function write($sess_id,$sess_data){ $sql = "insert into `session` (session_id,session_data,session_time) values('$sess_id','$sess_data', now()) on duplicate key update session_data = '$sess_data' , session_time = now()"; //这是为了gc() return mysql_query($sql); } function destroy($sess_id){ echo __FUNCTION__; $sql = "delete from `session` where session_id = '$sess_id'"; return mysql_query($sql); } function gc($sess_id){ $maxlifetime = ini_set("session.gc_maxlifetime"); echo __FUNCTION__; $sql = "delete from `session` where now()-session_time > '$maxlifetime' "; return mysql_query($sql); } header("content-type:text/html;charset=utf8"); session_start(); $_SESSION['name']='aa'; //echo session_id(); echo $_SESSION['name'];
1 0
- session信息入库
- session信息入库
- session的信息入库
- session信息入库
- session入库
- session入库
- session入库
- session入库
- session入库
- Session入库
- session 入库
- session入库
- session入库
- session入库
- session入库
- session入库
- session入库
- session入库
- 更新SDK后项目报错
- 网口扫盲二:Mac与Phy组成原理的简单分析
- BZOJ4642 泡泡
- IOS-检测blobck中self
- HTTP协议顺带DNS,TCP/IP
- session信息入库
- 1029. 旧键盘(20)--做题记录
- 关于接入新浪微博第三方登录
- Android 判断是否能真正上网(避免连入wifi无网的状态)
- HTTP协议头部与Keep-Alive模式详解
- jfianl 初用redis
- 464.Sort Integers II-整数排序II(容易题)
- MFC 中 如何屏蔽Esc和Ente
- POJ 2739 Sum of Consecutive Prime Numbers(素数序列和,尺取法)