session写入数据库
<?php
class session
{
private static $handle = null;
private static $ip = null;
private static $lifetime = null;
private static $time = null; static function init($pdo)
{
self::$handle = $pdo;
self::$ip = !empty($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : "unknow";
self::$lifetime = ini_get('session.gc_maxlifetime');
self::$time = time();
} static function start($pdo)
{
self::init($pdo);
session_set_save_handler(
array(__CLASS__,'open'),
array(__CLASS__,'close'),
array(__CLASS__,'read'),
array(__CLASS__,'write'),
array(__CLASS__,'destroy'),
array(__CLASS__,'gc')
);
session_start();
} public static function open($path, $name)
{
return true;
} public static function close()
{
return true;
} public static function read($PHPSESSID)
{
$sql = "select * from session where PHPSESSID = ?";
$smit = self::$handle->prepare($sql);
$smit->execute(array($PHPSESSID)); if(!$result = $smit->fetch(PDO::FETCH_ASSOC))
{
return '';
} if(self::$ip != $result['client_ip'])
{
self::destroy($PHPSESSID);
return '';
} if( ($result['update_time'] + self::$lifetime) < self::$time)
{
self::destroy($PHPSESSID);
return '';
} return $result['data'];
} public static function write($PHPSESSID,$data)
{
$sql = "select * from session where PHPSESSID = ?";
$stmt = self::$handle->prepare($sql);
$stmt->execute(array($PHPSESSID)); if($result = $stmt->fetch(PDO::FETCH_ASSOC))
{
if($result['data'] != $data || self::$time-30 > $result['update_time'])
{
$sql="update session set update_time = ?, data =? where PHPSESSID = ?";
$stmt = self::$handle->prepare($sql);
$stmt->execute(array(self::$time,$data,$PHPSESSID));
} }else
{
if(!empty($data))
{
$sql="insert into session(PHPSESSID, update_time, client_ip, data) values(?,?,?,?)";
$sth = self::$handle->prepare($sql);
$sth->execute(array($PHPSESSID,self::$time,self::$ip,$data));
}
}
return true;
} public static function destroy($PHPSESSID)
{
$sql = "delete from session where PHPSESSID = ?";
$sth = self::$handle->prepare($sql);
$sth->execute(array($PHPSESSID));
return true;
} public static function gc($lifetime)
{
$sql = "delete from session where update_time < ?";
$stmt=self::$handler->prepare($sql);
$stmt->execute(array(self::$time-self::$lifetime));
return true;
}
} try{
$pdo = new PDO("mysql:host=localhost;dbname=test", "root" ,"");
}catch(PDOException $e)
{
echo $e->getMessage();
} session::start($pdo);
session写入数据库的更多相关文章
- 将Session写入数据库
使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *@link http://home.cnblogs ...
- PHP session 写入数据库中的方法
首先解释下为什么要把session 写到数据库中呢,session 一般默认是以文件的形式放在php.ini 配置的目录中的, 如果你的网站实现了多台服务器负载均衡,这样用户访问你的网站,可能进入的服 ...
- session 存入数据库 php
session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...
- Asp.Net进程外Session(状态服务器Session、数据库Session)
介绍 我们知道,当浏览器关闭,或者网站重启的时候,会话就结束了.即Seesion就丢失了.(当Web.config配置文件改动,哪怕什么内容都不加,仅仅往配置文件中加一个空格都是改we.config变 ...
- python通过snmp协议运用多线程获取多台主机网卡信息,写入数据库
#-*- coding:utf-8 -*- import netsnmp class SnmpClass(object): """ SNMP ""&q ...
- flask写入数据库
sqlalchemy是一个关系型数据库框架,它提供了高层的ORM 和底层的原生数据库的操作. sqlalchemy实际上是对数据库的抽象,通过python对象操作数据库,提高开发效率. 安装 flas ...
- c#上传文件并将word pdf转化成txt存储并将内容写入数据库
c#上传文件并将word pdf转化成txt存储并将内容写入数据库 using System; using System.Data; using System.Configuration; using ...
- Log4j写入数据库详解
log4j是一个优秀的开源日志记录项目,我们不仅可以对输出的日志的格式自定义,还可以自己定义日志输出的目的地,比如:屏幕,文本文件,数据库,甚至能通过socket输出.本节主要讲述如何将日志信息输入到 ...
- php之将用户信息写入数据库
session高级应用将用户信息写入到数据库中 首先建立数据库表 在实验数据库sqldb中建立session表,用于存储数据 在根文件夹下建立须要用到的文件(重点是session,class.php这 ...
随机推荐
- TOJ1196: RSA Signing
题不在多,大概是多了也可能就是菜逼 1196: RSA Signing Time Limit(Common/Java):3000MS/30000MS Memory Limit:65536KBy ...
- ICCID
ICCID:Integrate circuit card identity 集成电路卡识别码(固化在手机SIM卡中) ICCID为IC卡的唯一识别号码,共有20位数字+英文组成,其编码格式为:XXX ...
- background-position-x和background-position-y的兼容性问题
一.语法: background-position-x : length | left | center | right background-position-y : length | left | ...
- 刷题总结———长跑路径(ssoj1982)
题目: 给定一个无向图···求特定几个点中两两间的最短路中的最小值····其中1≤N,M≤100000:T≤5:1≤K≤n:1≤边长≤100000,T为一个测试点的测试数··k为测试点数量 题解: 我 ...
- 网抓(XML Http Request、VBA)实现
第一种,先看VBA Public Function GetInfo(strMoblie As String) As String '创建对象 Dim xmlHttp As Object Set xml ...
- scrapy怎么设置带有密码的代理ip base64.encodestring不能用 python3.5,base64库里面的encodestring()被换成了什么?
自己写爬虫时买的代理ip有密码,在网上查了都是下面这种: 1.在Scrapy工程下新建"middlewares.py": import base64 # Start your mi ...
- bzoj 4555 NTT优化子集斯特林
题目大意 读入n 求\(f(n)=\sum_{i=0}^n\sum_{j=0}^i\left\{\begin{matrix}i \\ j\end{matrix}\right\}*2^j*j!\) 分析 ...
- GridView从行寻找到该控件,以及从该控件获知该行
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] GridView从行寻找到该控件: protected void Button3_Click(object sen ...
- set up trace code tool
這以 GNU GLOBAL 6.5.6 為示範 1: install GNU GLOBAL https://www.gnu.org/software/global/download.html sudo ...
- Scrapy学习-14-验证码识别
3种实现方案 1. 编码实现 tesseract-ocr 谷歌开源的识别工具,自己实现代码编码,投入精力大,回馈低.且平台验证码更换周期短,编好的代码容易失效 2. 在线打码 在线平台提供,识别率 ...