`
yaying
  • 浏览: 1071 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

PHP类分享:session保存到数据库

阅读更多

下面是Session保存到数据库的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(&$this, 'close'), 

array(&$this, 'read'), 

array(&$this, 'write'), 

array(&$this, 'destroy'), 

array(&$this, 'gc') 

); 


$this->_pdo = $pdo; 

$this->_ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null; 

$this->_maxLifeTime = ini_get('session.gc_maxlifetime'); 

} 


public function open($path,$name) 

{ 

return true; 

} 


public function close() 

{ 

return true; 

} 


public function read($id) 

{ 

$sql = 'SELECT * FROM session where PHPSESSID = ?'; 

$stmt = $this->_pdo->prepare($sql); 

$stmt->execute(array($id)); 


if (!$result = $stmt->fetch(PDO::FETCH_ASSOC)) { 

return null; 

} elseif ($this->_ip != $result['client_ip']) { 

return null; 

} elseif ($result['update_time']+$this->_maxLifeTime < time()){ 

$this->destroy($id); 

return null; 

} else { 

return $result['data']; 

} 

} 


public function write($id,$data) 

{ 

$sql = 'SELECT * FROM session where PHPSESSID = ?'; 

$stmt = $this->_pdo->prepare($sql); 

$stmt->execute(array($id)); 


if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 

if ($result['data'] != $data) { 

$sql = 'UPDATE session SET update_time =? , date = ? WHERE PHPSESSID = ?'; 


$stmt = $this->_pdo->prepare($sql); 

$stmt->execute(array(time(), $data, $id)); 

} 

} else { 

if (!empty($data)) { 

$sql = 'INSERT INTO session (PHPSESSID, update_time, client_ip, data) VALUES (?,?,?,?)'; 

$stmt = $this->_pdo->prepare($sql); 

$stmt->execute(array($id, time(), $this->_ip, $data)); 

} 

} 


return true; 

} 


public function destroy($id) 

{ 

$sql = 'DELETE FROM session WHERE PHPSESSID = ?'; 

$stmt = $this->_pdo->prepare($sql); 

$stmt->execute(array($id)); 


return true; 

} 


public function gc($maxLifeTime) 

{ 

$sql = 'DELETE FROM session WHERE update_time < ?'; 

$stmt = $this->_pdo->prepare($sql); 

$stmt->execute(array(time() - $maxLifeTime)); 


return true; 

} 

} 


try{ 

$pdo = new PDO('mysql:host=localhost;dbname=rphp4zf', 'root','rickyfeng'); 

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


new SessionToDB($pdo); 

} catch(PDOException $e) { 

echo 'Error: '.$e->getMessage(); 

}
来源:豆芽博客,地址:http://www.aichengxu.com/article/PHP/567_1.html保留原文链接,是开源分享的开始.
分享到:
评论

相关推荐

    php中将session保存到数据库的函数类代码

    标题所提及的"php中将session保存到数据库的函数类代码",就是用来实现这一功能的。这种自定义Session处理方式通常通过`session_set_save_handler()`函数来完成,该函数允许我们注册自定义的Session存储和恢复的...

    php中将session保存到数据库的函数类代码.zip

    总的来说,将PHP的Session保存到数据库是一种增强Session管理的有效方式。通过编写一个自定义的处理器类并使用`session_set_save_handler()`函数,我们可以确保Session数据的安全性和可靠性,同时还能根据项目需求...

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

    本文介绍了一个用于将PHP Session保存到数据库的PHP类。这个类可以帮助开发者将用户的会话数据存储在数据库中,而不是像默认情况下存储在文件或临时目录中。这样的做法在分布式应用或负载均衡环境下尤其有用,因为它...

    php.itcast.cn PHP课程-利用read和write将session的数据保存到数据库内

    本课程“php.itcast.cn PHP课程-利用read和write将session的数据保存到数据库内”就详细讲解了如何实现这一目标。 首先,我们需要了解PHP的Session处理流程。当用户访问一个启用session的PHP页面时,PHP会生成一个...

    session模拟数据库实现用户登录功能

    4. 客户端保存session ID:浏览器收到响应后,会保存这个session ID(通常作为cookie),并在之后的每次请求中自动带上。 5. 检查session状态:之后,每当用户访问受保护的页面时,服务器会检查请求中的session ID...

    PHP+MYSQL+SESSION实现简单购物车类数据库文件

    本教程将探讨如何使用PHP、MySQL和SESSION技术来实现一个简单的购物车类,这将帮助开发者理解如何在数据库环境中处理用户的商品选择。 首先,PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。在购物车...

    几个常见的php类-分页,数据库,session,cookie,上传类

    在PHP编程中,有几个核心概念和技术对于Web应用的开发至关重要,包括分页、数据库操作、会话(Session)管理、cookie处理以及文件上传。这些功能通常通过类来封装,以便于代码的重用和模块化。下面将详细介绍这些类...

    php session操作类

    1. **初始化Session**:类中可能会有一个初始化方法,用于开启Session并设置默认配置,例如设置Session保存路径、生命周期、是否使用cookie等。 2. **设置Session值**:类可能会提供一个`set_session_data`方法,...

    PHP封装的数据库保存session功能类

    【PHP封装的数据库保存session功能类】是一种将用户会话数据存储在数据库中的技术实践,以提高会话管理的安全性和可扩展性。在PHP中,session通常默认存储在服务器的临时文件系统中,但这种方式存在一些缺点,如数据...

    SESSION存放在数据库用法实例

    3. `session_data`:保存了session变量的实际数据,是一个文本字段,可以存储任何序列化后的PHP数据结构。 接下来,定义一个名为`session`的类,它实现了PHP的Session Handler接口。这个类有以下方法: 1. `open()...

    将PHP的session数据存储到数据库中的代码实例

    总结来说,这些代码实例为如何将PHP session数据存储到数据库提供了一套完整的解决方案,包含了数据库的表结构设计、存储过程以及PHP的自定义session处理函数。这些做法在需要高度扩展性和跨服务器session共享的环境...

    无限分类带数据库

    - `buildTree($items)`:接收从数据库查询到的所有分类数据,构建并返回分类树。 - `findPath($categoryId)`:根据分类ID找到完整的路径,用于显示分类的全路径。 在实际应用中,可以利用这个类方便地构建分类菜单...

    php基于session实现数据库交互的类实例

    【PHP基于Session实现数据库交互的类】 在PHP中,Session是一种常用的方法来跟踪用户的状态,尤其是在没有使用cookies或用户登录的情况下。本实例介绍了一个利用Session与数据库交互的类,通过这个类,我们可以将...

    php中使用session_set_save_handler()函数把session保存到MySQL数据库实例

    另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以我们就绪要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把他们的session保存在一台数据库服务器上就可以保证...

    PHP中session全面教程.txt

    1. **Session ID**: 当用户访问网站时,服务器会创建一个唯一的Session ID,并通过Cookie的形式存储到客户端。这个Session ID将作为识别特定用户的唯一标识。 2. **Session存储**: 服务器端为每个用户创建一个...

    php从入门到精通第二版中的第十一章cookie与session存入数据库的源码测试

    在这个过程中,`read()`和`write()`函数是核心,它们负责与数据库交互,读取和保存Session数据。`gc()`函数则用于定期清理数据库中过期的Session记录,以保持数据库的整洁。 总结来说,Cookie和Session是PHP中处理...

    php注册与登录小Demo_session_数据库_管理员与用户

    这个"php注册与登录小Demo"展示了如何利用PHP、session以及数据库来实现这一功能,同时区分管理员和普通用户。这里我们将深入探讨相关知识点。 1. **PHP Session**: PHP session是用于在用户浏览器会话之间存储...

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

    在类MySessionHandler中,我们看到几个私有属性,包括数据库连接对象$dbLink,保存Session的表名$_sessionTable,以及Session名$_sessionName。此外,还定义了一个常量SESSION_EXPIRE,表示Session的过期时间。 ...

Global site tag (gtag.js) - Google Analytics