下面是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_set_save_handler()来注册连接数据的函数。需要的朋友们可以下载参考。
一段php中将session保存到数据库的函数类代码,可以使用session_set_save_handler()来注册连接数据的函数。
Session保存到数据库的php类,需要的朋友可以参考下。
php.itcast.cn PHP课程-利用read和write将session的数据保存到数据库内
另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以我们就绪要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把他们的session保存在一台数据库服务器上就可以保证...
里我们将分享两个将PHP的session数据存储到数据库中的代码实例,分别针对PostgreSQL与MySQL,需要的朋友可以参考下
主要介绍了PHP封装的数据库保存session功能类,涉及php基于SessionHandlerInterface接口实现的读取、写入、保存、销毁等常用操作方法,需要的朋友可以参考下
中可以看到这样的一行,session.save_handler=”files”,这样的意思就是采用文件来保存session 的,要采用数据库来保存的话,我们需要修改成拥护模式,改称 session.save_handler=”use”就可以了,但是,这仅仅是...
因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键函数是session_set_save_handler,同时要将php.ini里的session.save_handler = files 改为 user...
不必每个访客建立一个会话,目前我的做法是把实例化的类存入了$_SESSION['c']内,这样的做法是比较方便,但是弊端是每个访客都要开一个新的会话,大家拿到代码之后可以修改一下把类的实例存入到memcache或数据库内都行
本文实例讲述了ThinkPHP自定义Redis处理SESSION的实现方法。分享给大家供大家参考,具体如下:...'SESSION_TYPE' => 'Redis', //session保存类型 'SESSION_PREFIX' => 'sess_', //session前缀 'REDIS_HOST' => '127.0.0
主要介绍了php实现将Session写入数据库的相关资料,需要的朋友可以参考下
然后通过后端程序传入到数据库中保存,如昵称和主题没有填写,否则发布失败。 5) 查看讯息:用户发布成功后自动跳转到查看讯息页面。然后读取页面session信息来显示登录者的名字。通过后端程序读取数据库的讯息并...
session是PHP程序设计中服务器端用来保存用户信息的一个变量,具有非常广泛的应用价值。本文实例讲述了PHP实现利用MySQL保存session的方法。分享给大家供大家参考之用。具体步骤如下: 本文实例的实现环境为: PHP ...
php的一个登录的类,可以连接mysql数据库,验证用数据表 ,使用cookie保存session id ,用户名无效提示 ,密码错误提示,如果cookie中未保存sid,则直接检查session ,用户认证 ,密码是否匹配 。
1. Android 使用volly发送网络请求,如果检测到服务端携带cookie信息,则保存,并在随后的网络请求中加入cookie,显示服务器下发的json数据。 2. 使用FinalDB保存和修改数据信息。 3.PHP服务端程序,设置cookie和...
cookie保存在客户端,session保存在服务器端的文件系统/数据库/memcache等。 2、安全性 session因为保存有服务器端,安全性无疑更高一些。 3、网络传输量 cookie通过网络在客户端与服务器端传输,会占用一些带宽;而...