天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

復制代碼 代碼如下:
<?php
/*============================文件說明========================================
@filename:     session.class.php
@description:  數據庫保存在線用戶session,實現在線用戶功能!
@notice:       session過期時間一個小時,因為我們的站點是使用cookie(有效時間是1小時)登錄。                
        因此我們只記錄用戶登錄的時間,而不是刷新一次更新一次                
        刪除數據庫中session記錄的動作發生在用戶超時后執行這個文件或正常退出(session_destory) 
@database:     database:sessions  field:sessionid(char32),uid(int10),last_visit(int10)
=============================================================================
*/
 class session {
     private $db;
     private $lasttime=3600;//超時時間:一個小時
      function session(&$db) {
         $this->db = &$db;
         session_module_name('user'); //session文件保存方式,這個是必須的!除非在php.ini文件中設置了
         session_set_save_handler(
             array(&$this, 'open'), //在運行session_start()時執行
              array(&$this, 'close'), //在腳本執行完成或調用session_write_close() 或 session_destroy()時被執行,即在所有session操作完后被執行
             array(&$this, 'read'), //在運行session_start()時執行,因為在session_start時,會去read當前session數據
             array(&$this, 'write'), //此方法在腳本結束和使用session_write_close()強制提交SESSION數據時執行
              array(&$this, 'destroy'), //在運行session_destroy()時執行
              array(&$this, 'gc') //執行概率由session.gc_probability 和 session.gc_divisor的值決定,時機是在open,read之后,session_start會相繼執行open,read和gc
         );
         session_start(); //這也是必須的,打開session,必須在session_set_save_handler后面執行
     }
        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的配置說明:
session.save_handler = "files"
 存儲和檢索與會話關聯的數據的處理器名字。默認為文件("files")。
 如果想要使用自定義的處理器(如基于數據庫的處理器),可用"user"。
 有一個使用PostgreSQL的處理器:http://sourceforge.NET/projects/phpform-ext/

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

session.name = "phpSESSID"
用在cookie里的會話ID標識名,只能包含字母和數字。

session.auto_start = Off
 在客戶訪問任何頁面時都自動初始化會話,默認禁止。
 因為類定義必須在會話啟動之前被載入,所以若打開這個選項,你就不能在會話中存放對象。

session.serialize_handler = "php"
 用來序列化/解序列化數據的處理器,php是標準序列化/解序列化處理器。
 另外還可以使用"php_binary"。當啟用了WDDX支持以后,將只能使用"wddx"。

session.gc_probability = 1
session.gc_divisor = 100
 定義在每次初始化會話時,啟動垃圾回收程序的概率。
 這個收集概率計算公式如下:session.gc_probability/session.gc_divisor
 對會話頁面訪問越頻繁,概率就應當越小。建議值為1/1000~5000。

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

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

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

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

session.use_cookies = On
 是否使用cookie在客戶端保存會話ID

session.use_only_cookies = Off
 是否僅僅使用cookie在客戶端保存會話ID
 打開這個選項可以避免使用URL傳遞會話帶來的安全問題。
 但是禁用Cookie的客戶端將使會話無法工作。

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

session.cookie_path = "/"
 傳遞會話ID的Cookie作用路徑。

session.cookie_domain =
 傳遞會話ID的Cookie作用域。
 默認為空表示表示根據cookie規范生成的主機名。

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

session.cookie_httponly = Off
 是否在cookie中添加httpOnly標志(僅允許HTTP協議訪問),
 這將導致客戶端腳本(JavaScript等)無法訪問該cookie。
 打開該指令可以有效預防通過XSS攻擊劫持會話ID。

session.cache_limiter = "nocache"
 設為{nocache|private|public}以指定會話頁面的緩存控制模式,
 或者設為空以阻止在http應答頭中發送禁用緩存的命令。

session.cache_expire = 180
 指定會話頁面在客戶端cache中的有效期限(分鐘)
 session.cache_limiter=nocache時,此處設置無效。

session.use_trans_sid = Off
 是否使用明碼在URL中顯示SID(會話ID)。
 默認是禁止的,因為它會給你的用戶帶來安全危險:
 1- 用戶可能將包含有效sid的URL通過email/irc/QQ/MSN…途徑告訴給其他人。
 2- 包含有效sid的URL可能會被保存在公用電腦上。
 3- 用戶可能保存帶有固定不變sid的URL在他們的收藏夾或者瀏覽歷史紀錄里面。
 基于URL的會話管理總是比基于Cookie的會話管理有更多的風險,所以應當禁用。

session.bug_compat_42 = On
session.bug_compat_warn = On
 php4.2之前的版本有一個未注明的"BUG":
 即使在register_globals=Off的情況下也允許初始化全局session變量,
 如果你在php4.3之后的版本中使用這個特性,會顯示一條警告。
 建議關閉該"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字符串中的每個字符內保存多少bit,
 這些二進制數是hash函數的運算結果。
 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模塊。
 指定重寫哪些HTML標簽來包含SID(僅當session.use_trans_sid=On時有效)
 form和fieldset比較特殊:
 如果你包含他們,URL重寫器將添加一個隱藏的"<input>",它包含了本應當額外追加到URL上的信息。
 如果要符合XHTML標準,請去掉form項并在表單字段前后加上<fieldset>標記。
 注意:所有合法的項都需要一個等號(即使后面沒有值)。
 推薦值為"a=href,area=href,frame=src,input=src,form=fakeentry"。

php技術解析php session_set_save_handler 函數的用法(mysql),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产亚洲精品网站在线视频 | 狠狠色噜噜狠狠狠狠米奇777 | 亚洲视频无码中字在线 | 伊人大香线蕉精品在线播放 | 好姑娘社区在线视频 | 捏揉舔水插按摩师 | 69成人免费视频 | 97在线精品视频 | 夜色55夜色66亚洲精品网站 | 麻豆精品人妻一区二区三区蜜桃 | 91情国产l精品国产亚洲区 | ai换脸女明星被躁在线观看免费 | xxx日本hd| 国产在线亚洲v天堂a | 麻豆AV久久无码精品九九 | 99久久e免费热视频百度 | 乡村教师电影完整版在线观看 | 色吧最新网址 | 亚洲国产高清视频在线观看 | 国产 高清 无码 中文 | 97视频免费观看2区 97视频免费观看 | 欧美国产在线一区 | 岛国片在线免费观看 | 成人片在线播放 | adc网址在线观看 | 做暖暖视频在线看片免费 | 成人1000部免费观看视频 | 伊人久久大香线蕉综合影 | 9477小游戏| 国产69精品久久久久乱码 | 九九九色成人网 | 啊…嗯啊好深男男高h文总受 | 欧美精品99久久久啪啪 | 综合色就爱涩涩涩综合婷婷 | 特级做A爰片毛片免费看108 | 午夜黄视频 | yellow片在线观看免费观看动漫 | 久久亚洲国产精品亚洲 | 国产精品成人免费视频99 | 一边亲着一面膜下的免费过程 | 久久免费国产视频 |