您当前的位置: 首页 > 学无止境 > 网站建设 网站首页网站建设
详解mysql操作sessions机制
发布时间:2017-04-14 11:18:57编辑:雪饮阅读()
回顾魔术方法-自动载入:
function __autoload($classname){
include $ classname.".class.php";
}
如在当前页面new一个类的时候该类并不存在于当前页面,那么就会以这个类名自动载入这个类的文件
注册类里面的一个函数为自动载入的魔术方法:
class App{
static function autoload($classname){
/*
因为注册时穿参是用类直接调用该方法,所以是静态调用
*/
require_once $ classname.".class.php";
}
}
spl_autoload_register(array("App","autoload"));
sessionID是一个md5字串
建立用于存储session的数据表:
create table session(sid char(32),data varchar(255),mtime int(10),ip char(15),card char(32)) engine = myisam default charset=gbk;
当php配置文件中将session垃圾判定时间该为1秒时,且垃圾处理机制的几率是100%则会执行两次垃圾处理机制。
session入库脚本示例:
<?php
/**
* 后盾网 http://www.houdunwang.com
* 2011-6-21 上午11:03:48
*/
class session{
//数据库操作句柄
static $db;
//SESSION表
static $table;
//SESSION过期时间
static $max_time;
//客户端身份信息
static $card;
//SESSION初始化
static function run(){
if(ini_get("session.save_handler") == "user" || ini_set("session.save_handler", "user")){
session_set_save_handler(
array(__CLASS__,"start"),
array(__CLASS__,"close"),
array(__CLASS__,"read"),
array(__CLASS__,"write"),
array(__CLASS__,"destroy"),
array(__CLASS__,"gc"));
ob_start();
self::$db = new mysqli("localhost","root","","edu");
!mysqli_connect_errno() or die("数据库连接错误");
self::$db->query("SET NAMES GBK");
self::$table="session";
self::$max_time = 600;
self::$card = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
session_start();
}
}
static function start($path,$session_name){
return true;
}
static function close(){
self::gc(self::$max_time);
self::$db->close();
return true;
}
static function read($sid){
$sql = "SELECT `data` FROM ".self::$table." WHERE `sid` ='{$sid}' AND `card`='".self::$card."'";
$result = self::$db->query($sql);
$row = $result->fetch_assoc();
return self::$db->affected_rows>0?$row['data']:'';
}
static function write($sid,$data){
$sql = "SELECT `sid` FROM ".self::$table." WHERE `sid` ='{$sid}' AND `card`='".self::$card."'";
$result = self::$db->query($sql);
$mtime = time();
if(self::$db->affected_rows>0){
$sql = "UPDATE ".self::$table." SET `data` ='{$data}',`mtime` ='{$mtime}'
WHERE `sid`='{$sid}'";
}else{
$sql = "INSERT INTO ".self::$table." (`sid`,`data`,`mtime`,`ip`,`card`) VALUES('{$sid}','{$data}','".time()."','{$_SERVER['REMOTE_ADDR']}','".self::$card."')";
}
return self::$db->query($sql)?true:false;
}
static function destroy($sid){
$sql = "DELETE FROM ".self::$table." WHERE `sid`='{$sid}'";
self::$db->query($sql);
return true;
}
static function gc($max_time){
$max_time = self::$max_time;
$sql = "DELETE FROM ".self::$table." WHERE `mtime`<'".(time()-$max_time)."'";
self::$db->query($sql);
return true;
}
}
session::run();
关键字词:session,入库,mysql
下一篇:SESSION的持久化处理