最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

session 加入mysql庫的方法

 更新時間:2016年07月15日 14:57:30   投稿:lqh  
本篇文章主要介紹了 session 加入mysql的方法,大家在開發(fā)過程中會遇到對數(shù)據(jù)庫的操作,有時會遇到Session加入mysql,這里給大家提供了方法,

我們知道,session是一種會話技術,用來實現(xiàn)跨腳本共享數(shù)據(jù)或者檢測跟蹤用戶狀態(tài)。

session的工作原理

(1)當一個session第一次被啟用時,一個唯一的標識被存儲于本地的cookie中。

(2)首先使用session_start()函數(shù),PHP從session倉庫中加載已經(jīng)存儲的session變量。

(3)當執(zhí)行PHP腳本時,通過使用session_register()函數(shù)注冊session變量。

(4)當PHP腳本執(zhí)行結束時,未被銷毀的session變量會被自動保存在本地一定路徑下的session庫中,這個路徑可以通過php.ini文件中的session.save_path指定,下次瀏覽網(wǎng)頁時可以加載使用。

 session是存放在服務器端的文件里的,因此session有可能因為文件數(shù)量過多,會在查詢session文件以及讀取的時候產(chǎn)生壓力。一般我們有三種解決方案

1.使用文件分層(缺點:I/O操作是系統(tǒng)的一個瓶頸,即使分層也不能避免此問題)

2.將session放入數(shù)據(jù)庫

3.將session放在內(nèi)存中(非關系性數(shù)據(jù)庫)(缺點:對服務器內(nèi)存要求教高)

隨著 session的增加,管理已經(jīng)不方便。

因此我們選用一個折中的辦法,將session存入mysql數(shù)據(jù)庫,也就是我們要講的重點.

建立一個表管理 session 。

 

 更改 session的存儲機制,讓 session 不再存在文件中,而是入庫。

更該存儲機制,只需要在文件中增加函數(shù)session_set_save_handler() 便可。

<?php 
ini_set("session.save_handler","user");  
//session.gc_probability = 1 分子  
ini_set("session.gc_probability",1);  
//session.gc_divisor = 1000 分母  
ini_set("session.gc_divisor",2);  
//session.gc_maxlifetime = 1440 垃圾回收時間,session有效期  
session_set_save_handler( "open","close","read","write","destroy","gc" ); 
//連接數(shù)據(jù)庫  
function open(){  
 @$link = mysql_connect('127.0.0.1', 'root', 'root');  
 mysql_query('set names utf8');  
 mysql_query('use wangbin'); 
 //<span>open 回調(diào)函數(shù)類似于類的構造函數(shù), 在會話打開的時候會被調(diào)用。 
 這是自動開始會話或者通過調(diào)用 session_start() 手動開始會話 
 之后第一個被調(diào)用的回調(diào)函數(shù)。 此回調(diào)函數(shù)操作成功返回TRUE,反之返回FALSE。</span> 
}  
function close(){  
 mysql_close(); 
 //<span>close 回調(diào)函數(shù)類似于類的析構函數(shù)。 在 write 回調(diào)函數(shù)調(diào)用之后調(diào)用。 
 當調(diào)用 session_write_close() 函數(shù)之后, 
 也會調(diào)用 close 回調(diào)函數(shù)。 此回調(diào)函數(shù)操作成功返回TRUE,反之返回FALSE。</span>  
}  
function read($sess_id){  
 $sql = "select session_data from `session` where session_id = '$sess_id'";  
 $result = mysql_query($sql);  
 if($rows = mysql_fetch_assoc($result)){ 
  return $rows['session_data']; } 
 else{ 
  return ''; 
 } 
<ol class="dp-py" start="1"><li class="alt"><span>如果會話中有數(shù)據(jù),read 回調(diào)函數(shù)必須返回將會話數(shù)據(jù)編碼(序列化)后的字符串。 </span></li><li class="alt"><span>如果會話中沒有數(shù)據(jù),read 回調(diào)函數(shù)返回空字符串。 </span></li><li class="alt"><span>在自動開始會話或者通過調(diào)用 session_start() 函數(shù)手動開始會話之后,</span></li><li class="alt"><span>PHP 內(nèi)部調(diào)用 read 回調(diào)函數(shù)來獲取會話數(shù)據(jù)。 在調(diào)用 read 之前,PHP會調(diào)用open回調(diào)函數(shù)。 
</span></li><li class="alt"><span>read 回調(diào)返回的序列化之后的字符串格式必須與 write 回調(diào)函數(shù)保存數(shù)據(jù)時的格式完全一致。</span></li><li class="alt"><span>PHP 會自動反序列化返回的字符串并填充 $_SESSION 超級全局變量。 
</span></li><li class="alt"><span>雖然數(shù)據(jù)看起來和 serialize() 函數(shù)很相似, 但是需要提醒的是,它們是不同的。 
</span></li><li class="alt"><span>請參考: session.serialize_handler。</span></li></ol> 
 }  
function write($sess_id,$sess_data){  
 $sql = "insert into `session` (session_id,session_data,session_time) values('$sess_id','$sess_data', now()) on duplicate key update session_data = '$sess_data' , session_time = now()"; //這是為了gc()  
 return mysql_query($sql); 
 /* 
 <span>在會話保存數(shù)據(jù)時會調(diào)用 write 回調(diào)函數(shù)。 此回調(diào)函數(shù)接收當前會話ID以及$_SESSION中數(shù)據(jù)序列化之后的字符串作為參數(shù)。 
 序列化會話數(shù)據(jù)的過程由 PHP 根據(jù) session.serialize_handler 設定值來完成。</span> 
 <span>序列化后的數(shù)據(jù)將和會話 ID 關聯(lián)在一起進行保存。 當調(diào)用 read 回調(diào)函數(shù)獲取數(shù)據(jù)時, 
 所返回的數(shù)據(jù)必須要和傳入write回調(diào)函數(shù)的數(shù)據(jù)完全保持一致。</span><span> 
 PHP 會在腳本執(zhí)行完畢或調(diào)用 session_write_close() 函數(shù)之后調(diào)用此回調(diào)函數(shù)。 
 注意,在調(diào)用完此回調(diào)函數(shù)之后,PHP 內(nèi)部會調(diào)用 close 回調(diào)函數(shù)。 </span> 
 Note: 
 <span>PHP 會在輸出流寫入完畢并且關閉之后 才調(diào)用 write 回調(diào)函數(shù), 
 所以在 write 回調(diào)函數(shù)中的調(diào)試信息不會輸出到瀏覽器中。 
 如果需要在 write 回調(diào)函數(shù)中使用調(diào)試輸出, 建議將調(diào)試輸出寫入到文件。</span> 
  */ 
 }  
function destroy($sess_id){  
 echo __FUNCTION__;  
 $sql = "delete from `session` where session_id = '$sess_id'";  
 return mysql_query($sql); 
 /* 
 <span>當調(diào)用 session_destroy() 函數(shù),或者調(diào)用 session_regenerate_id() 函數(shù)并且設置 destroy 參數(shù)為 TRUE 時, 
 會調(diào)用此回調(diào)函數(shù)。此回調(diào)函數(shù)操作成功返回 TRUE,反之返回 FALSE。</span> 
 */ 
  
}  
function gc($sess_id){  
 $maxlifetime = ini_set("session.gc_maxlifetime");  
 echo __FUNCTION__;  
 $sql = "delete from `session` where now()-session_time > '$maxlifetime' ";  
 return mysql_query($sql); 
 /* 
 <span>為了清理會話中的舊數(shù)據(jù),PHP 會不時的調(diào)用垃圾收集回調(diào)函數(shù)。 
 調(diào)用周期由 session.gc_probability 和 session.gc_divisor 參數(shù)控制。 
 傳入到此回調(diào)函數(shù)的 lifetime 參數(shù)由 session.gc_maxlifetime 設置。 
 此回調(diào)函數(shù)操作成功返回 TRUE,反之返回 FALSE。</span> 
 */  
}  
header("content-type:text/html;charset=utf8");  
session_start();  
$_SESSION['name']='aa';  
//echo session_id();  
echo $_SESSION['name']; 

 總結 session 運行機制:

1. 打開 session 時,語法上執(zhí)行函數(shù) session_start() ,php 的session 機制讀取瀏覽器端的 cookie,語法上表示為$_cookie['PHPSESSID']。

2. 根據(jù) cookie 找到存儲在服務器端的 session數(shù)據(jù)。

3. 把 session 數(shù)據(jù)反序列化,賦值給變量 $_SESSION。

4. 之后對變量 $_SESSION 的操作都是對變量的操作,不會更新 session文件。

5. 是否執(zhí)行了 session_destroy() 函數(shù),如果執(zhí)行了,那么刪除服務器端的session 文件。

6. 腳本結束時,判斷是否有 sessin 文件,或者說是否執(zhí)行過session_destroy() 方法。如果沒有執(zhí)行過,則把 $_SESSION 變量中的數(shù)據(jù)寫入到 session文件中。如果執(zhí)行過,那么什么也不做.

 以上就是對session 加入 mysql庫的資料整理,需要的朋友可以參考下。

相關文章

  • MySQL中的各種查詢問題

    MySQL中的各種查詢問題

    這篇文章主要介紹了MySQL中的各種查詢問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySQL實現(xiàn)樂觀鎖的方式詳解

    MySQL實現(xiàn)樂觀鎖的方式詳解

    在 MySQL 中,可以通過使用樂觀鎖來實現(xiàn)并發(fā)控制,以避免數(shù)據(jù)沖突和并發(fā)更新問題,樂觀鎖是一種樂觀的思想,它假設并發(fā)操作不會導致沖突,只有在提交更新時才會檢查是否發(fā)生沖突,本文給大家介紹了Mysql如何實現(xiàn)樂觀鎖,需要的朋友可以參考下
    2023-09-09
  • mysql主從數(shù)據(jù)庫不同步的2種解決方法

    mysql主從數(shù)據(jù)庫不同步的2種解決方法

    今天發(fā)現(xiàn)Mysql的主從數(shù)據(jù)庫沒有同步,很是疑惑,于是搜索整理了下,接下來介紹解決方法,有感興趣的朋友可以參考下
    2013-01-01
  • 淺談MySQL next-key lock 加鎖范圍

    淺談MySQL next-key lock 加鎖范圍

    我們知道MYSQL NEXT-KEY LOCK是用來防止幻讀,那么MySQL next-key lock 加鎖范圍是多少,很多人都不知道,本文就來詳細的介紹一下
    2021-06-06
  • MySQL查詢出現(xiàn)1055錯誤的原因及解決方法

    MySQL查詢出現(xiàn)1055錯誤的原因及解決方法

    Mysql在使用過程中經(jīng)常遇到錯誤,都是本人在實際應用中處理檢驗過的,本文對常見錯誤出現(xiàn)的代碼進行詳細分析,下面這篇文章主要給大家介紹了關于MySQL查詢出現(xiàn)1055錯誤的原因及解決方法,需要的朋友可以參考下
    2023-05-05
  • mysql 如何插入隨機字符串數(shù)據(jù)的實現(xiàn)方法

    mysql 如何插入隨機字符串數(shù)據(jù)的實現(xiàn)方法

    這篇文章主要介紹了mysql 如何插入隨機字符串數(shù)據(jù)的實現(xiàn)方法,需要的朋友可以參考下
    2016-09-09
  • 與MSSQL對比學習MYSQL的心得(八)--插入 更新 刪除

    與MSSQL對比學習MYSQL的心得(八)--插入 更新 刪除

    這一篇《與MSSQL對比學習MYSQL的心得(八)》將會講解MYSQL的插入、更新和刪除語句
    2014-08-08
  • Mysql 實現(xiàn)向上遞歸查找父節(jié)點并返回樹結構的示例代碼

    Mysql 實現(xiàn)向上遞歸查找父節(jié)點并返回樹結構的示例代碼

    通過mysql 8.0以下版本實現(xiàn),一個人多角色id,一個角色對應某個節(jié)點menu_id,根節(jié)點的父節(jié)點存儲為NULL, 向上遞歸查找父節(jié)點并返回樹結構,今天通過本文給大家介紹Mysql遞歸查找父節(jié)點并返回樹結構,感興趣的朋友一起看看吧
    2022-09-09
  • MySQL中的max()函數(shù)使用教程

    MySQL中的max()函數(shù)使用教程

    這篇文章主要介紹了MySQL中的max()函數(shù)使用教程,是學習MySQL入門的基礎知識,需要的朋友可以參考下
    2015-05-05
  • MySQL數(shù)據(jù)誤刪或者誤更新如何恢復詳細步驟(一看就會)

    MySQL數(shù)據(jù)誤刪或者誤更新如何恢復詳細步驟(一看就會)

    本文主要為開發(fā)人員提供在測試環(huán)境中恢復近期誤操作的少量數(shù)據(jù)的方法,首先介紹了如何下載并安裝MyFlash工具,然后詳細講解了如何利用該工具和MySQL的binlog日志來恢復誤刪或誤更新的數(shù)據(jù),介紹的非常詳細,需要的朋友可以參考下
    2024-10-10

最新評論

桂林市| 霍山县| 绍兴市| 襄汾县| 华池县| 康平县| 乌拉特中旗| 花莲县| 文山县| 嘉祥县| 邵阳市| 霞浦县| 九台市| 外汇| 延寿县| 太原市| 喀喇| 贵州省| 德惠市| 理塘县| 邯郸县| 孟州市| 庆城县| 鄂尔多斯市| 娱乐| 郎溪县| 韩城市| 长子县| 上饶市| 玛曲县| 普陀区| 仁化县| 广元市| 略阳县| 日照市| 南漳县| 永胜县| 犍为县| 榆林市| 六枝特区| 城步|