Session保存到数据库


  1. <?php 
  2. class SessionToDB 
  3.     private $_path         = null; 
  4.     private $_name         = null; 
  5.     private $_pdo          = null; 
  6.     private $_ip           = null; 
  7.     private $_maxLifeTime  = 0; 
  8.      
  9.     public function __construct(PDO $pdo) 
  10.     { 
  11.         session_set_save_handler( 
  12.             array(&$this, 'open'), 
  13.             array(&$this, 'close'), 
  14.             array(&$this, 'read'), 
  15.             array(&$this, 'write'), 
  16.             array(&$this, 'destroy'), 
  17.             array(&$this, 'gc')                                                             
  18.         ); 
  19.          
  20.         $this->_pdo   = $pdo; 
  21.         $this->_ip    = !emptyempty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null; 
  22.         $this->_maxLifeTime = ini_get('session.gc_maxlifetime'); 
  23.     } 
  24.      
  25.     public function open($path,$name) 
  26.     { 
  27.         return true;     
  28.     } 
  29.      
  30.     public function close() 
  31.     { 
  32.         return true; 
  33.     } 
  34.      
  35.     public function read($id) 
  36.     { 
  37.         $sql = 'SELECT * FROM session where PHPSESSID = ?'; 
  38.         $stmt = $this->_pdo->prepare($sql); 
  39.         $stmt->execute(array($id)); 
  40.          
  41.         if (!$result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
  42.             return null; 
  43.         } elseif ($this->_ip != $result['client_ip']) { 
  44.             return null; 
  45.         } elseif ($result['update_time']+$this->_maxLifeTime < time()){ 
  46.             $this->destroy($id); 
  47.             return null; 
  48.         } else { 
  49.             return $result['data'];     
  50.         } 
  51.     } 
  52.      
  53.     public function write($id,$data) 
  54.     { 
  55.         $sql = 'SELECT * FROM session where PHPSESSID = ?'; 
  56.         $stmt = $this->_pdo->prepare($sql); 
  57.         $stmt->execute(array($id)); 
  58.          
  59.         if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
  60.             if ($result['data'] != $data) { 
  61.                 $sql = 'UPDATE session SET update_time =? , date = ? WHERE PHPSESSID = ?'; 
  62.                  
  63.                 $stmt = $this->_pdo->prepare($sql); 
  64.                 $stmt->execute(array(time(), $data, $id)); 
  65.             } 
  66.         } else { 
  67.             if (!emptyempty($data)) { 
  68.                 $sql = 'INSERT INTO session (PHPSESSID, update_time, client_ip, data) VALUES (?,?,?,?)'; 
  69.                 $stmt = $this->_pdo->prepare($sql); 
  70.                 $stmt->execute(array($id, time(), $this->_ip, $data)); 
  71.             } 
  72.         } 
  73.          
  74.         return true; 
  75.     } 
  76.      
  77.     public function destroy($id) 
  78.     { 
  79.         $sql = 'DELETE FROM session WHERE PHPSESSID = ?'; 
  80.         $stmt = $this->_pdo->prepare($sql); 
  81.         $stmt->execute(array($id)); 
  82.          
  83.         return true;         
  84.     } 
  85.      
  86.     public function gc($maxLifeTime) 
  87.     { 
  88.         $sql = 'DELETE FROM session WHERE update_time < ?'; 
  89.         $stmt = $this->_pdo->prepare($sql); 
  90.         $stmt->execute(array(time() - $maxLifeTime)); 
  91.          
  92.         return true; 
  93.     } 
  94.  
  95. try{ 
  96.     $pdo = new PDO('mysql:host=localhost;dbname=rphp4zf', 'root','rickyfeng'); 
  97.     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
  98.      
  99.     new SessionToDB($pdo);     
  100. } catch(PDOException $e) { 
  101.     echo 'Error: '.$e->getMessage(); 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库
session
php session 存数据库、java session 数据库、session存到数据库、数据库保存session、pdo数据库保存session,以便于您获取更多的相关知识。

时间: 2024-09-20 00:01:02

Session保存到数据库的相关文章

ASP.NET将Session保存到数据库中的方法_实用技巧

几个方式(本文不作介绍),要将Session保存到SQL Server中,需要有以下几个步骤: 1.首先要创建用于保存Session数据的数据库,以命令行的形式用aspnet_regsql.exe来完成,具体命令为 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql.exe -ssadd -sstype c -d sd -E 该命令是以windows验证方式,添加了sd数据库保存session数据. 2.需要修改ASP.NET

rails2.2.2将session保存至数据库方法

1. 修改 environment.rb 文件  代码如下 复制代码 config.action_controller.session_store = :active_record_store #这句代码注释取消 2. 修改 application.rb 文件  代码如下 复制代码 protect_from_forgery :secret => 'xxx' #这句代码的后半句:secret注释取消 3. 生成 session 表 migrate 文件  代码如下 复制代码 rake db:ses

Session保存到数据库的php类分享_php技巧

复制代码 代码如下: <?php class SessionToDB { private $_path = null; private $_name = null; private $_pdo = null; private $_ip = null; private $_maxLifeTime = 0; public function __construct(PDO $pdo) { session_set_save_handler( array(&$this, 'open'), array(

SESSION存放在数据库用法实例_php技巧

本文实例讲述了SESSION存放在数据库用法.分享给大家供大家参考.具体如下: <?php /* CREATE TABLE `ws_sessions` ( `session_id` varchar(255) binary NOT NULL default '', `session_expires` int(10) unsigned NOT NULL default '0', `session_data` text, PRIMARY KEY (`session_id`) ) TYPE=InnoDB

PHP将session信息存储到数据库的类实例_php技巧

本文实例讲述了PHP将session信息存储到数据库的类.分享给大家供大家参考.具体分析如下: SessionHandlerInterface接口是PHP内置的接口,直接实现就行了 具体可以看php手册关于session_set_save_handler函数的解释! PHP代码如下: 复制代码 代码如下: /** * session信息存储到数据库的类 * 表结构: * CREATE TABLE IF NOT EXISTS `sessioninfo` ( *  `sid` varchar(255

javaweb-麻烦大家帮我看看为什么执行如下代码后,更改的数据无法保存到数据库中,这是为什么呢?

问题描述 麻烦大家帮我看看为什么执行如下代码后,更改的数据无法保存到数据库中,这是为什么呢? //修改信息,真正添加到数据库 updateInfo public ActionForward updateInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //将字符串转化为日期类型 DateFormat format = new Simple

我想每次请求后台时,保存一笔数据到一个集合,最后一次一起保存到数据库

问题描述 前台分页显示数据,翻第二页的时候,第一页的数据保存到集合listAll,翻第三页的时候,保存第二页数据到listAll...最后点提交的时候,一起把listAll中的数据保存到数据库.这样怎么做?private Set<ResourceAuthority> listAll;private RoleController() {log.info("log4j constructor RoleController");if(null==listAll){listAll=

session保存text数据类型问题

问题描述 在数据库中我用text数据类型保存"NOTE(备注)"字段,在一页面中用了session保存了textbox输入的数据,然后在另外一个页面中用session接收,出现下面提示: 数据类型text和varchar在equalto运算符中不兼容.!!第一个保存session的页面代码为:stringNOTES=txtNOTES.Text;Session["NOTE"]=NOTES.ToString();接收数据页面:stringNOTES=Session["NOTE&q

怎么把Action生成的图片保存到数据库中。坐等大神出现

问题描述 在Strut2的一个Action中,我用JFreeChart生成了一个图片.请问怎么把这个图片保存到MySql数据库呢,是直接保存图片好呢 还是保存图片路径好.希望大神们指点下 保存路径时候该怎么做啊 解决方案 我建议你保存路径,在保存路径之前, 你先把图片保存到你的磁盘上,然后获取保存图片的绝对路径,然后把绝对路径存入数据库.网上类似的例子很多,你多搜索一下,不要把图片保存在数据库.太差了......解决方案二:图片保存在数据库中就是一场噩梦,千万不要啊!解决方案三:如果图片不多比较