`
yaying
  • 浏览: 941 次
  • 性别: 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保存到数据库的函数类代码.zip

    分享一段php中将session保存到数据库的函数类代码,可以使用session_set_save_handler()来注册连接数据的函数。需要的朋友们可以下载参考。

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

    一段php中将session保存到数据库的函数类代码,可以使用session_set_save_handler()来注册连接数据的函数。

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

    Session保存到数据库的php类,需要的朋友可以参考下。

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

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

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

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

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

    里我们将分享两个将PHP的session数据存储到数据库中的代码实例,分别针对PostgreSQL与MySQL,需要的朋友可以参考下

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

    主要介绍了PHP封装的数据库保存session功能类,涉及php基于SessionHandlerInterface接口实现的读取、写入、保存、销毁等常用操作方法,需要的朋友可以参考下

    探讨如何把session存入数据库

    中可以看到这样的一行,session.save_handler=”files”,这样的意思就是采用文件来保存session 的,要采用数据库来保存的话,我们需要修改成拥护模式,改称 session.save_handler=”use”就可以了,但是,这仅仅是...

    使用数据库保存session的方法

    因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键函数是session_set_save_handler,同时要将php.ini里的session.save_handler = files 改为 user...

    PHP把实例化的class对象永久保存

    不必每个访客建立一个会话,目前我的做法是把实例化的类存入了$_SESSION['c']内,这样的做法是比较方便,但是弊端是每个访客都要开一个新的会话,大家拿到代码之后可以修改一下把类的实例存入到memcache或数据库内都行

    ThinkPHP自定义Redis处理SESSION的实现方法

    本文实例讲述了ThinkPHP自定义Redis处理SESSION的实现方法。分享给大家供大家参考,具体如下:...'SESSION_TYPE' =&gt; 'Redis', //session保存类型 'SESSION_PREFIX' =&gt; 'sess_', //session前缀 'REDIS_HOST' =&gt; '127.0.0

    php实现将Session写入数据库

    主要介绍了php实现将Session写入数据库的相关资料,需要的朋友可以参考下

    PHP+MySQL留言板课程设计

    然后通过后端程序传入到数据库中保存,如昵称和主题没有填写,否则发布失败。 5) 查看讯息:用户发布成功后自动跳转到查看讯息页面。然后读取页面session信息来显示登录者的名字。通过后端程序读取数据库的讯息并...

    PHP实现利用MySQL保存session的方法

    session是PHP程序设计中服务器端用来保存用户信息的一个变量,具有非常广泛的应用价值。本文实例讲述了PHP实现利用MySQL保存session的方法。分享给大家供大家参考之用。具体步骤如下: 本文实例的实现环境为: PHP ...

    php的一个登录的类,可以连接mysql数据库

    php的一个登录的类,可以连接mysql数据库,验证用数据表 ,使用cookie保存session id ,用户名无效提示 ,密码错误提示,如果cookie中未保存sid,则直接检查session ,用户认证 ,密码是否匹配 。

    Android Volly 和PHP服务端通信(含Cookie和Session),FinalDB数据库

    1. Android 使用volly发送网络请求,如果检测到服务端携带cookie信息,则保存,并在随后的网络请求中加入cookie,显示服务器下发的json数据。 2. 使用FinalDB保存和修改数据信息。 3.PHP服务端程序,设置cookie和...

    php中session与cookie的比较

    cookie保存在客户端,session保存在服务器端的文件系统/数据库/memcache等。 2、安全性 session因为保存有服务器端,安全性无疑更高一些。 3、网络传输量 cookie通过网络在客户端与服务器端传输,会占用一些带宽;而...

Global site tag (gtag.js) - Google Analytics