通過session_set_save_handler實(shí)現(xiàn)自定義會(huì)話機(jī)制

先看代碼,通過<code>session_set_save_handler</code>機(jī)制可以實(shí)現(xiàn)一個(gè)自定義的會(huì)話機(jī)制,依賴于mysql數(shù)據(jù)庫(kù)

<?php

$sdbc=NULL;
function open_session(){
    global $sdbc;
    $sdbc=mysqli_connect("localhost","root","root",'test');
    if(mysqli_connect_errno($sdbc)){
        return false;
    }else{
        return true;
    }
}

function close_session(){
    global $sdbc;
    return mysqli_close($sdbc);
}

function read_session($sid){
    global $sdbc;
    $q=sprintf('SELECT * FROM session WHERE id="$s"',mysqli_real_escape_string($sdbc,$sid));
    $r=mysqli_query($sdbc,$q);
    if(mysqli_num_rows($r)==1){
        list($data)=mysqli_fetch_array($r,MYSQLI_NUM);
        return $data;
    }else{
        return"";
    }
}

function write_session($sid,$data){
    global $sdbc;
    $q=sprintf('REPLACE INTO session (id,data) VALUE ("$s","%s")',mysqli_real_escape_string($sdbc,$sid),mysqli_real_escape_string($sdbc,$data));
    $r=mysqli_query($sdbc,$q);
    return true;
}
function destroy_session($sid){
    global $sdbc;
    $q=sprintf('DELETE FROM session WHERE id="%s"',mysqli_real_escape_string($sdbc,$sid));
    $r=mysqli_query($sdbc,$q);
    $_SESSION=array();
}
function clean_session($expire){
    global $sdbc;
    $q=sprintf('DELETE FROM session WHERE DATE_ADD(last_accessed,INTERVAL $d SECOND )<NOW()0',(int)$expire);
    $r=mysqli_query($sdbc,$q);
    return true;
}

session_set_save_handler('open_session','close_session','read_session','write_session','destroy_session','clean_session');
session_start();

代碼解釋:

(1)<code>mysqli_connect</code>打開一個(gè)連接掉mysql數(shù)據(jù)庫(kù)的連接,語(yǔ)法:<code>mysqli_connect('localhost','username','password','tablename')</code>

(2)<code>mysqli_connect_errno</code>返回上一次錯(cuò)誤鏈接的錯(cuò)誤代碼。

(3)<code>sprintf</code>把其中的<code>%</code>換成一個(gè)作為參數(shù)傳遞的參數(shù)。

(4)<code>mysqli_query</code>針對(duì)mysql數(shù)據(jù)庫(kù)進(jìn)行操作,mysqli_query(database,query)。

(5)<code>mysqli_num_rows</code>返回結(jié)果集中行的數(shù)量。

(6)<code>mysqli_fetch_array</code>從結(jié)果中取得一行作為結(jié)果。

(7)<code>mysqli_real_escape_string</code>函數(shù)轉(zhuǎn)義在 SQL 語(yǔ)句中使用的字符串中的特殊字符。語(yǔ)法:<code>myaqli_real_escape_string(database,word)</code>

(9)session_set_save_handler設(shè)置用戶自定義會(huì)話存儲(chǔ)函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 7,030評(píng)論 3 64
  • 一、MemCache簡(jiǎn)介 session MemCache是一個(gè)自由、源碼開放、高性能、分布式的分布式內(nèi)存對(duì)象緩存...
    李偉銘MIng閱讀 4,014評(píng)論 2 13
  • sqlmap用戶手冊(cè) 說明:本文為轉(zhuǎn)載,對(duì)原文中一些明顯的拼寫錯(cuò)誤進(jìn)行修正,并標(biāo)注對(duì)自己有用的信息。 ======...
    wind_飄閱讀 2,207評(píng)論 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當(dāng)給sq...
    xuningbo閱讀 10,567評(píng)論 2 22
  • 本周小結(jié) 總得來說,本周沒啥進(jìn)展,不管是實(shí)驗(yàn)室工作還是自己的學(xué)習(xí)方面。周一:由于周末的重慶沒有進(jìn)入狀態(tài)周二:導(dǎo)師就...
    im天行閱讀 174評(píng)論 0 0

友情鏈接更多精彩內(nèi)容