20150127--Session入库
?
和濤哥學(xué)習(xí)MVC三
目錄
和濤哥學(xué)習(xí)MVC三.......................................................................................................... 1
一、簡介.......................................................................................................................... 2
1、什么是session?.................................................................................................. 2
2、為什么需要會話控制技術(shù)?.................................................................................. 2
3、session原理圖...................................................................................................... 2
二、session入庫的實(shí)現(xiàn).................................................................................................... 3
1、要使用到的知識點(diǎn):............................................................................................ 3
2、代碼實(shí)現(xiàn).............................................................................................................. 4
a)定義基本操作的6個(gè)函數(shù).............................................................................. 4
b)更改session存取方式,并開啟session.......................................................... 4
c)session系統(tǒng)的gc垃圾回收機(jī)制..................................................................... 5
3、session入庫......................................................................................................... 6
a)在open方法中,鏈接數(shù)據(jù)庫......................................................................... 6
b)在close方法中,關(guān)閉鏈接資源..................................................................... 6
c)在read方法中,讀取sess_id信息,在read方法中,可以通過參數(shù)來調(diào)用系統(tǒng)中的session_id 7
d)在write方法中,實(shí)現(xiàn)對session數(shù)據(jù)庫的寫入操作........................................ 7
e)在destroy方法中,銷毀指定session_id的數(shù)據(jù).............................................. 7
f)在gc方法中,判斷session數(shù)據(jù)是否過期....................................................... 7
三、整合session入庫到MVC項(xiàng)目中................................................................................ 8
1、設(shè)計(jì)數(shù)據(jù)庫如下圖所示......................................................................................... 8
2、在Core文件夾中創(chuàng)建Session.class.php做為核心入庫文件..................................... 9
3、創(chuàng)建Session類..................................................................................................... 9
4、創(chuàng)建session入庫的6個(gè)方法............................................................................... 10
5、繼承Model模型,鏈接數(shù)據(jù)庫,更改session存取方式........................................ 10
6、由于open與close不需要進(jìn)行相關(guān)操作,可以為其設(shè)置默認(rèn)返回值true.............. 10
7、read讀方法實(shí)現(xiàn)................................................................................................. 11
8、write寫方法實(shí)現(xiàn)................................................................................................ 11
9、destroy刪除方法實(shí)現(xiàn)......................................................................................... 11
10、gc垃圾回收方法實(shí)現(xiàn)........................................................................................ 11
11、在Core/Application.class.php中更改session存取機(jī)制......................................... 12
四、購物車實(shí)現(xiàn).............................................................................................................. 12
1、采用數(shù)據(jù)庫方式存儲購物車................................................................................ 12
2、數(shù)據(jù)庫架構(gòu)........................................................................................................ 12
product 產(chǎn)品表................................................................................................. 12
shopcar 購物車表............................................................................................. 13
order 訂單表................................................................................................. 13
一、簡介
1、什么是session?
答:一種會話控制技術(shù)
2、為什么需要會話控制技術(shù)?
1)早期互聯(lián)網(wǎng)采用HTTP協(xié)議發(fā)送請求,但由于HTTP是無狀態(tài)的請求,所以網(wǎng)站管理者無法獲知當(dāng)前用戶的用戶軌跡。
2)Cookie技術(shù)
相當(dāng)于超市的會員卡
3)Session技術(shù)
相當(dāng)于超市發(fā)卡但是保留實(shí)體卡,只發(fā)給我們卡號(Session_ID)
3、session原理圖
由上圖可知,session操作主要是對session的增刪改查(session文件的讀取與寫入)操作,但是由于文件讀寫操作要實(shí)現(xiàn)對服務(wù)器的I/O進(jìn)行開銷,如淘寶這種大數(shù)據(jù)系統(tǒng),如果采用文本方式保存session數(shù)據(jù),那么是無法想象的,另如想統(tǒng)計(jì)當(dāng)前在線人數(shù)等信息,使用數(shù)據(jù)集群共享session數(shù)據(jù)時(shí),都是很難實(shí)現(xiàn)的。
那么如何實(shí)現(xiàn)對以上問題的解決呢?
答:Session入庫技術(shù)
Session入庫技術(shù)實(shí)際就是人為更改session數(shù)據(jù)讀取與寫入的位置,如下圖所示:
二、session入庫的實(shí)現(xiàn)
1、要使用到的知識點(diǎn):
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc )
功能:實(shí)現(xiàn)對session讀取存取方式的函數(shù)
$open : 打開session讀寫操作
$close : 關(guān)閉session讀寫操作
$read : 讀取session文件(讀取數(shù)據(jù)庫中的session信息)
$write : 寫入session文件(寫入session信息到數(shù)據(jù)庫中)
$destroy : 銷毀session文件(刪除session信息)
$gc : 當(dāng)session文件過期時(shí),系統(tǒng)自動(dòng)刪除該文件(刪除過期session記錄)
2、代碼實(shí)現(xiàn)
a)定義基本操作的6個(gè)函數(shù)
b)更改session存取方式,并開啟session
運(yùn)行效果:
說明:當(dāng)系統(tǒng)只有session_start()開啟函數(shù)時(shí),系統(tǒng)會自動(dòng)調(diào)用open、read、write、close四個(gè)函數(shù),當(dāng)系統(tǒng)中存在session_destroy函數(shù)時(shí),系統(tǒng)將自動(dòng)關(guān)閉session文件寫入功能,而出發(fā)系統(tǒng)中的destroy函數(shù),如下圖所示:
代碼如下:
c)session系統(tǒng)的gc垃圾回收機(jī)制
php系統(tǒng)中,可以在php.ini配置文件中設(shè)置gc回收概率,默認(rèn)系統(tǒng)回收概率1/1000
可以通過更改php.ini中的以下代碼,更改回收概率
更改php.ini配置信息,如下
運(yùn)行效果,如下
以上方式人為更改系統(tǒng)gc垃圾回收概率,但是建議該概率的值為1/1000 ~ 1/5000
3、session入庫
a)在open方法中,鏈接數(shù)據(jù)庫
b)在close方法中,關(guān)閉鏈接資源
c)在read方法中,讀取sess_id信息,在read方法中,可以通過參數(shù)來調(diào)用系統(tǒng)中的session_id
d)在write方法中,實(shí)現(xiàn)對session數(shù)據(jù)庫的寫入操作
e)在destroy方法中,銷毀指定session_id的數(shù)據(jù)
f)在gc方法中,判斷session數(shù)據(jù)是否過期
可以通過php.ini中的以下參數(shù)進(jìn)行判斷
默認(rèn)session文件過期時(shí)間為24分鐘,1440秒
判斷session數(shù)據(jù)是否過期
運(yùn)行效果如下:
posted on 2016-04-22 23:19?山山未遲 閱讀(...) 評論(...) 編輯 收藏
轉(zhuǎn)載于:https://www.cnblogs.com/lifushan/p/5423196.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的20150127--Session入库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客园随笔
- 下一篇: Learning React Nativ