码迷,mamicode.com
首页 > 其他好文 > 详细

session入库

时间:2015-05-11 22:08:43      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:php   session   数据库   

session_set_save_handler(callback open,callback close,callback read,call write,callback destroy,callback  gc)

 

各个参数的的执行时机以及使用说明

回调函数

描述

open()

在运行session_start()时执行,该函数的声明需要两个参数,系统会自动的将php.inisession.save_path选项值传递给第一个参数,将session名自动的传递到第二个参数中,返回true则继续往下执行

close()

该函数不需要参数,在脚本执行完成或调用session_write_close(),session_destroy()时被执行,即在所有session操作完成后被执行,如果不需要处理直接返回true

read()

在运行session_start()时执行,因为在开启会话时,会去read当前的session数据并且写入$_SESSION变量。需要声明一个参数,系统会自动的将SessionId传递给该函数,用于通过sessionId获取对应的用户数据,返回当前的用户数据写入$_SESSION数据

write()

该函数在脚本结束和对$_SESSION变量赋值时执行,需要声明两个参数,分别是sessionid和串行化后session信息字符串,在对$_SESSION变量赋值时,就可以通过Sessionid找到存储位置,并且将信息写入,存储成功可以返回true继续向下执行

 

destroy()

在运行session_destroy时执行,需要声明一个参数,系统会自动将sessionId传递给该函数,去除对应的回话信息

gc()

垃圾回收程序启动时执行。需要声明一个参数,系统自动将php.ini

session.gc_maxlifetime选项的值传递给该函数,用户删除超过这个时间的session信息,返回true可以继续向下执行

 

Session入库就是将session的信息保存到表中,需要设置session.save_handler = user

 

新建session

DROP TABLE IF EXISTS `session`;

CREATE TABLE `session` (

  `sid` char(32) NOT NULL,

  `update_time` int(11) default NULL,

  `data` text,

  PRIMARY KEY  (`sid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

需要存储 sessionid ,更新时间,格式化数据

 

然后写功能性代码:

<?php

$link=mysql_connect("127.0.0.1","root","root");

mysql_select_db("session");

mysql_query("set names utf8");

 

function open($save_path,$session_name){

return true;

}

 

function  close(){

return true;

}

 

function  read($sid){

/*通过sid先从数据库中查找当前用户的信息*/

$sql="select * from session where sid=‘$sid‘";

//echo $sql;

$re=mysql_query($sql);

/*如果没有结果返回空字符串给$_SESSION变量*/

if(!$result=mysql_fetch_array($re)){

return "";

}

/*如果有数据返回结果*/

 

return $result["data"];

}

 

function write($sid,$data){

/*每次写之前先从数据库中获取一下是否已经存在该用户的session信息*/

$sql="select * from session  where sid=‘$sid‘";

$re=mysql_query($sql);

$time=time();

/*如果存在该用户的信息则去修改,如果不存在要重新添加一行数据*/

if($result=mysql_fetch_array($re)){

//存在的情况

$sql1="update session  set update_time=‘$time‘,data=‘$data‘ where sid=‘$sid‘";

mysql_query($sql1);

}else{

//不存在的情况

if(!empty($data)){

$sql1="insert into session(sid,update_time,data) values(‘$sid‘,‘$time‘,‘$data‘)";

$sth1=mysql_query($sql1);

}

}

return true;

 

}

 

function destroy($sid){

//通过sessionid来删除当前用户的记录

$sql="delete  from session where sid=‘$sid‘";

mysql_query($sql);

return true;

}

 

function  gc($maxfiletime){

//通过sessionid来删除当前用户的记录

$sql="delete * from session where update_time<$maxfiletime";

mysql_query($sql);

return true;

}

session_set_save_handler("open","close","read","write","destroy","gc");

session_start();

?>

session入库

标签:php   session   数据库   

原文地址:http://blog.csdn.net/csdn_ndx/article/details/45647579

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!