<?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写入数据库的更多相关文章

  1. 将Session写入数据库

    使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *@link http://home.cnblogs ...

  2. PHP session 写入数据库中的方法

    首先解释下为什么要把session 写到数据库中呢,session 一般默认是以文件的形式放在php.ini 配置的目录中的, 如果你的网站实现了多台服务器负载均衡,这样用户访问你的网站,可能进入的服 ...

  3. session 存入数据库 php

     session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...

  4. Asp.Net进程外Session(状态服务器Session、数据库Session)

    介绍 我们知道,当浏览器关闭,或者网站重启的时候,会话就结束了.即Seesion就丢失了.(当Web.config配置文件改动,哪怕什么内容都不加,仅仅往配置文件中加一个空格都是改we.config变 ...

  5. python通过snmp协议运用多线程获取多台主机网卡信息,写入数据库

    #-*- coding:utf-8 -*- import netsnmp class SnmpClass(object): """ SNMP ""&q ...

  6. flask写入数据库

    sqlalchemy是一个关系型数据库框架,它提供了高层的ORM 和底层的原生数据库的操作. sqlalchemy实际上是对数据库的抽象,通过python对象操作数据库,提高开发效率. 安装 flas ...

  7. c#上传文件并将word pdf转化成txt存储并将内容写入数据库

    c#上传文件并将word pdf转化成txt存储并将内容写入数据库 using System; using System.Data; using System.Configuration; using ...

  8. Log4j写入数据库详解

    log4j是一个优秀的开源日志记录项目,我们不仅可以对输出的日志的格式自定义,还可以自己定义日志输出的目的地,比如:屏幕,文本文件,数据库,甚至能通过socket输出.本节主要讲述如何将日志信息输入到 ...

  9. php之将用户信息写入数据库

    session高级应用将用户信息写入到数据库中 首先建立数据库表 在实验数据库sqldb中建立session表,用于存储数据 在根文件夹下建立须要用到的文件(重点是session,class.php这 ...

随机推荐

  1. BZOJ-1085 骑士精神

    估价函数其实就是与目标状态有几个不同... 迭代启发搜索. #include <cstdlib> #include <cstdio> #include <cstring& ...

  2. Dumb Bones(uva 10529)

    题意:给定n,表示要放n个骨牌,每次放下骨牌,有可能向左倒的概率为pl,向右倒的概率为pr,如果倒下,会将那一侧的骨牌全部推倒,可以选择位置先后放骨牌,问说一种放骨牌次数最少的期望是多少. /* 设d ...

  3. 百度图表echars插件使用案例

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  4. 安装apache2.4和php7.1的方法记录

    下载扩展 这是PHP官方扩展下载的地址 http://pecl.php.net 点击下载dll文件,放到php的ext目录. 看这个说明下载你PHP版本支持的版本.

  5. HRBUST 2072:萌萌哒十五酱的礼物~(树,字典树)

    题意:n个点的一棵树,树的边上有权值.一条路径的权值定义成这条路径上所有边的权值的xor.问所有路径的最大权值是多少. 思路: 首先,树上任意两点之间的路可以表示成 这两点到根节点的路- 其最近公共祖 ...

  6. java三种匿名的方式开启线程

    package demo04; /* * 使用匿名内部类,实现多线程程序 * 前提:继承或者接口实现 * new 父类或者接口(){ * 重写 抽象方法 * } */ public class Thr ...

  7. 重新实践《轻量级DJANGO》这本书

    从手到尾,手写的DJANGO,不借助命令,效果一样的呢. import os import sys import hashlib from django.conf import settings DE ...

  8. JS-禁止移动端长按页面后弹出“在浏览器打开”这个菜单

    阻止浏览器的touchstart事件 document.addEventListener('touchstart', function(e) {        e.preventDefault(); ...

  9. Network | DHCP

    动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途: 给内部网络或网络服务供应商自动分配I ...

  10. sql server trace

    http://www.cnblogs.com/zhijianliutang/p/4113911.html http://www.cnblogs.com/studyzy/archive/2009/01/ ...