php实现Session存储到Redis

介绍了php实现Session存储到Redis的方法,php Session可以保存到文本或者内存、还有数据库,本文讲的是存到Redis的方法.

php实现Session存储到Redis

对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库、或者使用Redis KEY-VALUE数据存储方案

  首先新建一个session表

CREATE TABLE `sessions` (

`sid` char(40) NOT NULL,

`updatetime` int(20) NOT NULL,

`data` varchar(200) NOT NULL,

UNIQUE KEY `sid` (`sid`) USING HASH

) ENGINE=MEMORY DEFAULT CHARSET=utf8;

Mysql 的memory引擎采用内存表,所有数据存储在内存,操作速度快

<?php

//引入数据库文件

include "";

class MySessionHandler implements SessionHandlerInterface

{

private $savePath;

private $sessData;

public $expiretime; //设置过期时间

public $db; //数据库

public function __construct($hanlder =''){

$this->db = Database::getInstance();

//获取数据库实力

///var_dump($this->db);

}

public function open($savePath, $sessionName)

{

return true;

}

public function close()

{

return true;

}

public function read($id)

{

$sql ="select * from sessions where sid ='$id'";

$result = $this->db->execute($sql);

if(!empty($result)){

return $this->sessData = $result;

}

}

//函数的.参数 $id -> 当前会话ID

//数据DATA -> 序列化之后的字符串

public function write($id, $data)

{

// echo $id;

// echo $data;

$now = time();

$newExp = $now+$this->expiretime; //总时间=当前时间 + 期限时间

$sql = "select * from sessions where sid ='$id'";

$result = $this->db->getOne($sql);

//var_dump($result);

if($data==''||isset($data)){

$data = $this->sessData;

}

if($result){

//如果存在则更新

$sql ="update sessions set updatetime = '$newExp',data ='$data' where sid = '$id'";

//echo $sql;

$update_data =$this->db->execute($sql);

if($update_data){

return true;

}

}else{

//不存在则生成生成

$sql = "insert into sessions(sid,updatetime,data) values('$id','$now','$data')";

$insert_data = $this->db->execute($sql);

if($insert_data){

return true;

}

}

return false;

}

public function destroy($id)

{ //销毁

$sql = "delete from sessions where sid="."$id";

$destory = $this->db->execute($sql);

if($destory){

return true;

}else{

return false;

}

}

public function gc($sessMaxLifeTime)

{

$t = time();

$sql ="delete from sessions where $t - 'updatetime'>${sessMaxLifeTime}";

$data = $this->db->execute($this->tosql);

if($data){