下面是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保存到数据库的函数类代码",就是用来实现这一功能的。这种自定义Session处理方式通常通过`session_set_save_handler()`函数来完成,该函数允许我们注册自定义的Session存储和恢复的...
总的来说,将PHP的Session保存到数据库是一种增强Session管理的有效方式。通过编写一个自定义的处理器类并使用`session_set_save_handler()`函数,我们可以确保Session数据的安全性和可靠性,同时还能根据项目需求...
本文介绍了一个用于将PHP Session保存到数据库的PHP类。这个类可以帮助开发者将用户的会话数据存储在数据库中,而不是像默认情况下存储在文件或临时目录中。这样的做法在分布式应用或负载均衡环境下尤其有用,因为它...
本课程“php.itcast.cn PHP课程-利用read和write将session的数据保存到数据库内”就详细讲解了如何实现这一目标。 首先,我们需要了解PHP的Session处理流程。当用户访问一个启用session的PHP页面时,PHP会生成一个...
4. 客户端保存session ID:浏览器收到响应后,会保存这个session ID(通常作为cookie),并在之后的每次请求中自动带上。 5. 检查session状态:之后,每当用户访问受保护的页面时,服务器会检查请求中的session ID...
本教程将探讨如何使用PHP、MySQL和SESSION技术来实现一个简单的购物车类,这将帮助开发者理解如何在数据库环境中处理用户的商品选择。 首先,PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。在购物车...
在PHP编程中,有几个核心概念和技术对于Web应用的开发至关重要,包括分页、数据库操作、会话(Session)管理、cookie处理以及文件上传。这些功能通常通过类来封装,以便于代码的重用和模块化。下面将详细介绍这些类...
1. **初始化Session**:类中可能会有一个初始化方法,用于开启Session并设置默认配置,例如设置Session保存路径、生命周期、是否使用cookie等。 2. **设置Session值**:类可能会提供一个`set_session_data`方法,...
【PHP封装的数据库保存session功能类】是一种将用户会话数据存储在数据库中的技术实践,以提高会话管理的安全性和可扩展性。在PHP中,session通常默认存储在服务器的临时文件系统中,但这种方式存在一些缺点,如数据...
3. `session_data`:保存了session变量的实际数据,是一个文本字段,可以存储任何序列化后的PHP数据结构。 接下来,定义一个名为`session`的类,它实现了PHP的Session Handler接口。这个类有以下方法: 1. `open()...
总结来说,这些代码实例为如何将PHP session数据存储到数据库提供了一套完整的解决方案,包含了数据库的表结构设计、存储过程以及PHP的自定义session处理函数。这些做法在需要高度扩展性和跨服务器session共享的环境...
- `buildTree($items)`:接收从数据库查询到的所有分类数据,构建并返回分类树。 - `findPath($categoryId)`:根据分类ID找到完整的路径,用于显示分类的全路径。 在实际应用中,可以利用这个类方便地构建分类菜单...
【PHP基于Session实现数据库交互的类】 在PHP中,Session是一种常用的方法来跟踪用户的状态,尤其是在没有使用cookies或用户登录的情况下。本实例介绍了一个利用Session与数据库交互的类,通过这个类,我们可以将...
另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以我们就绪要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把他们的session保存在一台数据库服务器上就可以保证...
1. **Session ID**: 当用户访问网站时,服务器会创建一个唯一的Session ID,并通过Cookie的形式存储到客户端。这个Session ID将作为识别特定用户的唯一标识。 2. **Session存储**: 服务器端为每个用户创建一个...
在这个过程中,`read()`和`write()`函数是核心,它们负责与数据库交互,读取和保存Session数据。`gc()`函数则用于定期清理数据库中过期的Session记录,以保持数据库的整洁。 总结来说,Cookie和Session是PHP中处理...
这个"php注册与登录小Demo"展示了如何利用PHP、session以及数据库来实现这一功能,同时区分管理员和普通用户。这里我们将深入探讨相关知识点。 1. **PHP Session**: PHP session是用于在用户浏览器会话之间存储...
在类MySessionHandler中,我们看到几个私有属性,包括数据库连接对象$dbLink,保存Session的表名$_sessionTable,以及Session名$_sessionName。此外,还定义了一个常量SESSION_EXPIRE,表示Session的过期时间。 ...