欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析php session_set_save_handler 函數(shù)的用法(mysql)

 更新時(shí)間:2013年06月29日 10:14:52   投稿:jingxian  
本篇文章是對(duì)php中session_set_save_handler 函數(shù)的用法(mysql)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

復(fù)制代碼 代碼如下:

<?php
/*============================文件說(shuō)明========================================
@filename:     session.class.php
@description:  數(shù)據(jù)庫(kù)保存在線(xiàn)用戶(hù)session,實(shí)現(xiàn)在線(xiàn)用戶(hù)功能!
@notice:       session過(guò)期時(shí)間一個(gè)小時(shí),因?yàn)槲覀兊恼军c(diǎn)是使用cookie(有效時(shí)間是1小時(shí))登錄。                
        因此我們只記錄用戶(hù)登錄的時(shí)間,而不是刷新一次更新一次                
        刪除數(shù)據(jù)庫(kù)中session記錄的動(dòng)作發(fā)生在用戶(hù)超時(shí)后執(zhí)行這個(gè)文件或正常退出(session_destory) 
@database:     database:sessions  field:sessionid(char32),uid(int10),last_visit(int10)
=============================================================================
*/
 class session {
     private $db;
     private $lasttime=3600;//超時(shí)時(shí)間:一個(gè)小時(shí)
      function session(&$db) {
         $this->db = &$db;
         session_module_name('user'); //session文件保存方式,這個(gè)是必須的!除非在Php.ini文件中設(shè)置了
         session_set_save_handler(
             array(&$this, 'open'), //在運(yùn)行session_start()時(shí)執(zhí)行
              array(&$this, 'close'), //在腳本執(zhí)行完成或調(diào)用session_write_close() 或 session_destroy()時(shí)被執(zhí)行,即在所有session操作完后被執(zhí)行
             array(&$this, 'read'), //在運(yùn)行session_start()時(shí)執(zhí)行,因?yàn)樵趕ession_start時(shí),會(huì)去read當(dāng)前session數(shù)據(jù)
             array(&$this, 'write'), //此方法在腳本結(jié)束和使用session_write_close()強(qiáng)制提交SESSION數(shù)據(jù)時(shí)執(zhí)行
              array(&$this, 'destroy'), //在運(yùn)行session_destroy()時(shí)執(zhí)行
              array(&$this, 'gc') //執(zhí)行概率由session.gc_probability 和 session.gc_divisor的值決定,時(shí)機(jī)是在open,read之后,session_start會(huì)相繼執(zhí)行open,read和gc
         );
         session_start(); //這也是必須的,打開(kāi)session,必須在session_set_save_handler后面執(zhí)行
     }
        function unserializes($data_value) {
         $vars = preg_split(
             '/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\|/',
             $data_value, -1, PREG_SPLIT_NO_EMPTY |
             PREG_SPLIT_DELIM_CAPTURE
         );
         for ($i = 0; isset($vars[$i]); $i++) {
             $result[$vars[$i++]] = unserialize($vars[$i]);
         }
         return $result;
     } 
     function open($path, $name) {
         return true;
     }
     function close() {
         $this->gc($this->lasttime);
         return true;
     }
    function read($SessionKey){
         $sql = "SELECT uid FROM sessions WHERE session_id = '".$SessionKey."' limit 1";
         $query =$this->db->query($sql);
         if($row=$this->db->fetch_array($query)){
           return $row['uid'];
         }else{
             return "";
         }
              }
     function write($SessionKey,$VArray) {
         require_once(MRoot.DIR_WS_CLASSES .'db_mysql_class.php');
        $db1=new DbCom();
       // make a connection to the database... now
        $db1->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);
        $db1->query("set names utf8");
        $this->db=$db1;
        $SessionArray = addslashes($VArray);
         $data=$this->unserializes($VArray);  
                          $sql0 = "SELECT uid FROM sessions WHERE session_id = '".$SessionKey."' limit 1";
         $query0 =$this->db->query($sql0);
         if($this->db->num_rows($query0)<=0){
             if (isset($data['webid']) && !empty($data['webid'])) {
                $this->db->query("insert into `sessions` set `session_id` = '$SessionKey',uid='".$data['webid']."',last_visit='".time()."'");
             }   
                    return true;
         }else{
             /*$sql = "update `sessions` set ";
             if(isset($data['webid'])){
             $sql .= "uid = '".$data['webid']."', " ;
             }
             $sql.="`last_visit` = null "
                   . "where `session_id` = '$SessionKey'";
                               $this->db->query($sql); */
             return true;
         }   
     }
   function destroy($SessionKey) {
      $this->db->query("delete from `sessions` where `session_id` = '$SessionKey'");
      return true;
    }
    function gc($lifetime) {
        $this->db->query("delete from `sessions` where unix_timestamp(now()) -`last_visit` > '".$this->lasttime."'");
        return true;
    }
     }
 ?>

下面是php.ini中session的配置說(shuō)明:
session.save_handler = "files"
 存儲(chǔ)和檢索與會(huì)話(huà)關(guān)聯(lián)的數(shù)據(jù)的處理器名字。默認(rèn)為文件("files")。
 如果想要使用自定義的處理器(如基于數(shù)據(jù)庫(kù)的處理器),可用"user"。
 有一個(gè)使用PostgreSQL的處理器:http://sourceforge.net/projects/phpform-ext/

session.save_path = "/tmp"
 傳遞給存儲(chǔ)處理器的參數(shù)。對(duì)于files處理器,此值是創(chuàng)建會(huì)話(huà)數(shù)據(jù)文件的路徑。
 Windows下默認(rèn)為臨時(shí)文件夾路徑。
 你可以使用"N[MODE]/path"這樣模式定義該路徑(N是一個(gè)整數(shù))。
 N表示使用N層深度的子目錄,而不是將所有數(shù)據(jù)文件都保存在一個(gè)目錄下。
 [MODE]可選,必須使用8進(jìn)制數(shù),默認(rèn)600(=384),表示每個(gè)目錄下最多保存的會(huì)話(huà)文件數(shù)量。
 這是一個(gè)提高大量會(huì)話(huà)性能的好主意。
 注意0: "N[MODE]/path"兩邊的雙引號(hào)不能省略。
 注意1: [MODE]并不會(huì)改寫(xiě)進(jìn)程的umask。
 注意2: php不會(huì)自動(dòng)創(chuàng)建這些文件夾結(jié)構(gòu)。請(qǐng)使用ext/session目錄下的mod_files.sh腳本創(chuàng)建。
 注意3: 如果該文件夾可以被不安全的用戶(hù)訪問(wèn)(比如默認(rèn)的"/tmp"),那么將會(huì)帶來(lái)安全漏洞。
 注意4: 當(dāng)N>0時(shí)自動(dòng)垃圾回收將會(huì)失效,具體參見(jiàn)下面有關(guān)垃圾搜集的部分。

session.name = "PHPSESSID"
用在cookie里的會(huì)話(huà)ID標(biāo)識(shí)名,只能包含字母和數(shù)字。

session.auto_start = Off
 在客戶(hù)訪問(wèn)任何頁(yè)面時(shí)都自動(dòng)初始化會(huì)話(huà),默認(rèn)禁止。
 因?yàn)轭?lèi)定義必須在會(huì)話(huà)啟動(dòng)之前被載入,所以若打開(kāi)這個(gè)選項(xiàng),你就不能在會(huì)話(huà)中存放對(duì)象。

session.serialize_handler = "php"
 用來(lái)序列化/解序列化數(shù)據(jù)的處理器,php是標(biāo)準(zhǔn)序列化/解序列化處理器。
 另外還可以使用"php_binary"。當(dāng)啟用了WDDX支持以后,將只能使用"wddx"。

session.gc_probability = 1
session.gc_divisor = 100
 定義在每次初始化會(huì)話(huà)時(shí),啟動(dòng)垃圾回收程序的概率。
 這個(gè)收集概率計(jì)算公式如下:session.gc_probability/session.gc_divisor
 對(duì)會(huì)話(huà)頁(yè)面訪問(wèn)越頻繁,概率就應(yīng)當(dāng)越小。建議值為1/1000~5000。

session.gc_maxlifetime = 1440
 超過(guò)此參數(shù)所指的秒數(shù)后,保存的數(shù)據(jù)將被視為'垃圾'并由垃圾回收程序清理。
 判斷標(biāo)準(zhǔn)是最后訪問(wèn)數(shù)據(jù)的時(shí)間(對(duì)于FAT文件系統(tǒng)是最后刷新數(shù)據(jù)的時(shí)間)。
 如果多個(gè)腳本共享同一個(gè)session.save_path目錄但session.gc_maxlifetime不同,
 那么將以所有session.gc_maxlifetime指令中的最小值為準(zhǔn)。
 如果使用多層子目錄來(lái)存儲(chǔ)數(shù)據(jù)文件,垃圾回收程序不會(huì)自動(dòng)啟動(dòng)。
 你必須使用一個(gè)你自己編寫(xiě)的shell腳本、cron項(xiàng)或者其他辦法來(lái)執(zhí)行垃圾搜集。
 比如,下面的腳本相當(dāng)于設(shè)置了"session.gc_maxlifetime=1440" (24分鐘):
 cd /path/to/sessions find -cmin +24 | xargs rm

session.referer_check =
 如果請(qǐng)求頭中的"Referer"字段不包含此處指定的字符串則會(huì)話(huà)ID將被視為無(wú)效。
 注意:如果請(qǐng)求頭中根本不存在"Referer"字段的話(huà),會(huì)話(huà)ID將仍將被視為有效。
 默認(rèn)為空,即不做檢查(全部視為有效)。

session.entropy_file = "/dev/urandom"
 附加的用于創(chuàng)建會(huì)話(huà)ID的外部高熵值資源(文件),
 例如UNIX系統(tǒng)上的"/dev/random"或"/dev/urandom"

session.entropy_length = 0
 從高熵值資源中讀取的字節(jié)數(shù)(建議值:16)。

session.use_cookies = On
 是否使用cookie在客戶(hù)端保存會(huì)話(huà)ID

session.use_only_cookies = Off
 是否僅僅使用cookie在客戶(hù)端保存會(huì)話(huà)ID
 打開(kāi)這個(gè)選項(xiàng)可以避免使用URL傳遞會(huì)話(huà)帶來(lái)的安全問(wèn)題。
 但是禁用Cookie的客戶(hù)端將使會(huì)話(huà)無(wú)法工作。

session.cookie_lifetime = 0
 傳遞會(huì)話(huà)ID的Cookie有效期(秒),0 表示僅在瀏覽器打開(kāi)期間有效。

session.cookie_path = "/"
 傳遞會(huì)話(huà)ID的Cookie作用路徑。

session.cookie_domain =
 傳遞會(huì)話(huà)ID的Cookie作用域。
 默認(rèn)為空表示表示根據(jù)cookie規(guī)范生成的主機(jī)名。

session.cookie_secure = Off
 是否僅僅通過(guò)安全連接(https)發(fā)送cookie。

session.cookie_httponly = Off
 是否在cookie中添加httpOnly標(biāo)志(僅允許HTTP協(xié)議訪問(wèn)),
 這將導(dǎo)致客戶(hù)端腳本(JavaScript等)無(wú)法訪問(wèn)該cookie。

session.cache_limiter = "nocache"
 設(shè)為{nocache|private|public}以指定會(huì)話(huà)頁(yè)面的緩存控制模式,
 或者設(shè)為空以阻止在http應(yīng)答頭中發(fā)送禁用緩存的命令。

session.cache_expire = 180
 指定會(huì)話(huà)頁(yè)面在客戶(hù)端cache中的有效期限(分鐘)
 session.cache_limiter=nocache時(shí),此處設(shè)置無(wú)效。

session.use_trans_sid = Off
 是否使用明碼在URL中顯示SID(會(huì)話(huà)ID)。
 默認(rèn)是禁止的,因?yàn)樗鼤?huì)給你的用戶(hù)帶來(lái)安全危險(xiǎn):
 1- 用戶(hù)可能將包含有效sid的URL通過(guò)email/irc/QQ/MSN…途徑告訴給其他人。
 2- 包含有效sid的URL可能會(huì)被保存在公用電腦上。
 3- 用戶(hù)可能保存帶有固定不變sid的URL在他們的收藏夾或者瀏覽歷史紀(jì)錄里面。
 基于URL的會(huì)話(huà)管理總是比基于Cookie的會(huì)話(huà)管理有更多的風(fēng)險(xiǎn),所以應(yīng)當(dāng)禁用。

session.bug_compat_42 = On
session.bug_compat_warn = On
 PHP4.2之前的版本有一個(gè)未注明的"BUG":
 即使在register_globals=Off的情況下也允許初始化全局session變量,
 如果你在PHP4.3之后的版本中使用這個(gè)特性,會(huì)顯示一條警告。
 建議關(guān)閉該"BUG"并顯示警告。

session.hash_function = 0
 生成SID的散列算法。SHA-1的安全性更高一些
 0: MD5 (128 bits)
 1: SHA-1 (160 bits)
 建議使用SHA-1。

session.hash_bits_per_character = 4
 指定在SID字符串中的每個(gè)字符內(nèi)保存多少bit,
 這些二進(jìn)制數(shù)是hash函數(shù)的運(yùn)算結(jié)果。
 4: 0-9, a-f
 5: 0-9, a-v
 6: 0-9, a-z, A-Z, "-", ","
 建議值為 5

url_rewriter.tags = "a=href,area=href,frame=src,form=,fieldset="
 此指令屬于PHP核心部分,并不屬于Session模塊。
 指定重寫(xiě)哪些HTML標(biāo)簽來(lái)包含SID(僅當(dāng)session.use_trans_sid=On時(shí)有效)
 form和fieldset比較特殊:
 如果你包含他們,URL重寫(xiě)器將添加一個(gè)隱藏的"<input>",它包含了本應(yīng)當(dāng)額外追加到URL上的信息。
 如果要符合XHTML標(biāo)準(zhǔn),請(qǐng)去掉form項(xiàng)并在表單字段前后加上<fieldset>標(biāo)記。
 注意:所有合法的項(xiàng)都需要一個(gè)等號(hào)(即使后面沒(méi)有值)。
 推薦值為"a=href,area=href,frame=src,input=src,form=fakeentry"。

相關(guān)文章

  • PHP實(shí)現(xiàn)json_decode不轉(zhuǎn)義中文的方法

    PHP實(shí)現(xiàn)json_decode不轉(zhuǎn)義中文的方法

    這篇文章主要介紹了PHP實(shí)現(xiàn)json_decode不轉(zhuǎn)義中文的方法,結(jié)合實(shí)例形式具體分析了php5.4+及5.3版本針對(duì)json_decode實(shí)現(xiàn)不轉(zhuǎn)義中文的具體操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • PHP緩存工具XCache安裝與使用方法詳解

    PHP緩存工具XCache安裝與使用方法詳解

    這篇文章主要介紹了PHP緩存工具XCache安裝與使用方法,較為詳細(xì)的分析了緩存工具XCache在Windows及Linux平臺(tái)安裝與Xcache操作封裝類(lèi)實(shí)例,需要的朋友可以參考下
    2018-04-04
  • php安裝php_rar擴(kuò)展實(shí)現(xiàn)rar文件讀取和解壓的方法

    php安裝php_rar擴(kuò)展實(shí)現(xiàn)rar文件讀取和解壓的方法

    這篇文章主要介紹了php安裝php_rar擴(kuò)展實(shí)現(xiàn)rar文件讀取和解壓的方法,涉及php擴(kuò)展組件的安裝與使用相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11
  • PHP預(yù)定義接口——Iterator用法示例

    PHP預(yù)定義接口——Iterator用法示例

    這篇文章主要介紹了PHP預(yù)定義接口——Iterator用法,結(jié)合實(shí)例形式分析了PHP Iterator(迭代器)接口相關(guān)原理、定義與使用方法,需要的朋友可以參考下
    2020-06-06
  • PHP中include()與require()的區(qū)別說(shuō)明

    PHP中include()與require()的區(qū)別說(shuō)明

    引用文件的方法有兩種:require 及 include。兩種方式提供不同的使用彈性。
    2010-03-03
  • PHPExcel導(dǎo)出Excel報(bào)錯(cuò):PHPExcel_IOFactory::load()的解決方案

    PHPExcel導(dǎo)出Excel報(bào)錯(cuò):PHPExcel_IOFactory::load()的解決方案

    這篇文章主要介紹了PHPExcel導(dǎo)出Excel報(bào)錯(cuò):PHPExcel_IOFactory::load()的解決方案,文中有詳細(xì)的問(wèn)題分析和解決方法供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-11-11
  • PHP實(shí)現(xiàn)基本留言板功能原理與步驟詳解

    PHP實(shí)現(xiàn)基本留言板功能原理與步驟詳解

    這篇文章主要介紹了PHP實(shí)現(xiàn)基本留言板功能,結(jié)合實(shí)例形式分析了PHP實(shí)現(xiàn)基本留言板功能的相關(guān)原理、數(shù)據(jù)庫(kù)構(gòu)建、功能實(shí)現(xiàn)等步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2020-03-03
  • 詳解PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重

    詳解PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重

    這篇文章主要介紹了PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí) 吧
    2019-03-03
  • PHP借助phpmailer發(fā)送郵件

    PHP借助phpmailer發(fā)送郵件

    phpmailer是一款免費(fèi)的php郵件發(fā)送插件,我們可以利用phpmailer登錄到我們指定的郵件然后再利用這個(gè)郵件給我們自動(dòng)發(fā)郵件了,這個(gè)現(xiàn)在免費(fèi)的郵箱像163,sina都支持,好了費(fèi)話(huà)不說(shuō)多了來(lái)看看一段phpmainer 163郵件發(fā)送郵件吧。
    2015-05-05
  • PHP實(shí)現(xiàn)的簡(jiǎn)單緩存類(lèi)

    PHP實(shí)現(xiàn)的簡(jiǎn)單緩存類(lèi)

    這篇文章主要介紹了PHP實(shí)現(xiàn)的簡(jiǎn)單緩存類(lèi),實(shí)例分析了php緩存文件的定義及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論