session入庫,phpsession入庫

來源:互聯網
上載者:User

session入庫,phpsession入庫

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

 

各個參數的的執行時機以及使用說明

回呼函數

描述

open()

在運行session_start()時執行,該函數的聲明需要兩個參數,系統會自動的將php.ini中session.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);

/*如果沒有結果返回Null 字元串給$_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();

?>

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.