使用数据库保存session的方法
来源:互联网 发布:网络作家系列小说 编辑:程序博客网 时间:2024/05/21 23:17
使用数据库保存session的方法,阅读使用数据库保存session的方法,php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由于某种安全原因关闭了浏览器的cookie,程序中的session相关操作将无法执行。
因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键函数是session_set_save_handler
,同时要将php.ini
里的session.save_handler = files
改为 user
。这里我们讨论的环境是linux+nginx+mysql+php
。
存储session数据的表结构如下:
CREATE TABLE `sessions` ( `skey` char(32) NOT NULL, `expiry` int(11) unsigned NOT NULL, `svalue` text NOT NULL, PRIMARY KEY (`skey`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
<?php/** * Created by PhpStorm. * User: leyan * Date: 2016/6/12 * Time: 10:44 */class MySessionHandler implements SessionHandlerInterface{ public $mysqli; public $EXPIRE_TIME = 3600;//过期时间 function open($save_path, $session_id) { // TODO: Implement open() method. $this->mysqli = new Mysqli("localhost","root","root","test"); if ( mysqli_connect_errno ()) { printf ( "Connect failed: %s\n" , mysqli_connect_error ()); exit(); } return true; } function read($session_id) { // TODO: Implement read() method. $res = $this->mysqli->query("select svalue from sessions where skey = $session_id"); //$row = $res->fetch_assoc(); return $res; } function write($session_id, $session_data) { // TODO: Implement write() method. $expiry = time()+$this->EXPIRE_TIME; $sql = "insert into sessions (svalue,skey,expiry)values('$session_data','$session_id',$expiry)"; $this->mysqli->query($sql); return true; } //当session.gc_probability/session.gc_divisor == 1的时候会执行回收机制gc() function gc($maxlifetime) { // TODO: Implement gc() method. $sql = 'delete from sessions where expiry < '.time(); $this->mysqli->query($sql); return true; } function close() { // TODO: Implement close() method. return true; } function destroy($session_id) { // TODO: Implement destroy() method. $this->mysqli->query("delete from sessions where skey = $session_id"); return true; }}$handler = new MySessionHandler();session_set_save_handler($handler,true);session_start();#完成上面的代码之后就可以进行正常的session操作,而数据是保存在数据库中的//destoryunset($_SESSION['first']);//session_destroy();//write$_SESSION['first'] = 'test_one';//readecho $_SESSION['first'];
0 0
- 使用数据库保存session的方法
- 使用数据库保存session的方法
- 使用数据库保存session的方法
- 使用数据库保存session的方法
- PHP中使用数据库保存session
- 用数据库保存session
- 数据库保存session
- php session 保存数据库
- 使用配置文件保存连接数据库的字符串的方法
- Session的保存、删除及更新方法
- Safari不能保存session的处理方法
- ThinkPHP将session保存在数据库中的方法
- CodeIgniter 在使用hook中获取保存在数据库里的session中的userdata
- Session使用的方法
- 使用 StateServer 保存 Session
- 使用stateserver保存session
- OKHTTP使用 保存session
- php采用数据库保存session
- 简述Android SDK制作流程
- recyclerview23+出现多个item只显示第一个item的问题
- laravel的基础学习(二)
- ios中设置app音效音效和震动
- storm中初始化类
- 使用数据库保存session的方法
- 日志6.12
- 易宝支付开发实现
- SwipeBackActivity的另一种方法(二)
- Qt 4.7.2编译过程的简要记录
- JDBC学习
- laravel的基础学习(三)
- android framework重要的服务
- 航电 2041 超级楼梯