摘要:會(huì)話機(jī)制如果是基于的會(huì)話機(jī)制,在調(diào)用之前,是不能夠有任何實(shí)際的輸出的,即使是空格或者是空行因?yàn)楹瘮?shù)調(diào)用的時(shí)候,其實(shí)是通過函數(shù)向中設(shè)置了這個(gè),對(duì)應(yīng)的是一個(gè)隨機(jī)的唯一的位字符串而前面是不可以有任何實(shí)際的輸出的注意這里的名字是在文件中進(jìn)行的配置配
session 會(huì)話機(jī)制: 1)如果是基于cookie的會(huì)話機(jī)制,在調(diào)用session_start()之前,是不能夠有任何實(shí)際的輸出的,即使是空格或者是空行!
2)這里我們需要明白session_start()函數(shù)的作用究竟是什么:因?yàn)閟ession_start()函數(shù)調(diào)用的時(shí)候,其實(shí)是通過setCookie()函數(shù)向cookie中設(shè)置了
PHPSESSID這個(gè)key,對(duì)應(yīng)的value是一個(gè)隨機(jī)的、唯一的32位字符串! 而setCookie前面是不可以有任何實(shí)際的輸出的!注意:這里的PHPSESSID名字是在php.ini文件中進(jìn)行的配置!配置如下圖所示:
①如果session機(jī)制是基于cookie的,那么當(dāng)腳本第一次運(yùn)行的時(shí)候
A、 在客戶端上session_start()函數(shù)會(huì)通過setCookie()函數(shù)向Cookie中保留一個(gè)key,默認(rèn)情況下Key的名字是PHPSESSID,對(duì)應(yīng)的值是一個(gè)32位的、唯一的、隨機(jī)的字符串!
B、 在服務(wù)器端,會(huì)產(chǎn)生一個(gè)以PHPSESSID的value值為名字的文件!其中保留的是session中的數(shù)據(jù)!同時(shí),在腳本中創(chuàng)建$_SESSION超全局?jǐn)?shù)組,并將session文件的數(shù)據(jù)反序列化,添加到$_SESSION數(shù)組中!②當(dāng)腳本第二次,及以后運(yùn)行的時(shí)候
A、 瀏覽器端會(huì)自動(dòng)攜帶COOKIE中的PHPSESSID對(duì)應(yīng)的value值,將數(shù)據(jù)送至服務(wù)器端!
B、在服務(wù)器端,一旦開啟sessioin_start()的時(shí)候,會(huì)根據(jù)客戶端提供的sessionid去尋找對(duì)應(yīng)的session文件,將session中的變量讀取出來!在腳本中創(chuàng)建$_SESSION超全局?jǐn)?shù)組,將數(shù)據(jù)定義到$_SESSION數(shù)組中!注意:$_SESION數(shù)組數(shù)組只有在調(diào)用session_start()函數(shù)之后,更確切確切的說,是開啟session機(jī)制之后]才會(huì)存在!之所以這樣說,是由于session_start()時(shí),會(huì)先得到session_id,通過session_id找到對(duì)應(yīng)的文件內(nèi)容,然后進(jìn)行反序列化!如果,我們接著使用session_id()函數(shù)來滯空session_id的話,我們就找不到session中的內(nèi)容了!
同時(shí),$_SESSION是超全局定義數(shù)組,他和常量一樣,并沒有作用域的概念!幾乎在哪里都可以使用!
接下來,我們來看一點(diǎn)代碼!當(dāng)我們第一次運(yùn)行這個(gè)腳本,腳本代碼如下 腳本A中的代碼:
在服務(wù)器端保存session文件夾中的的文件入下:
代碼中的保值至如下:
在客戶端保存了一個(gè)cookie文件,內(nèi)容如下:
通過觀察我們可以發(fā)現(xiàn):PHPSESSIONID對(duì)應(yīng)的value值和服務(wù)器端session文件的文件名是一致的!
當(dāng)第二次及其以后運(yùn)行這個(gè)腳本的時(shí)候,在服務(wù)器端,并沒有什么變化
在客戶端,發(fā)起http請求的時(shí)候,我們可以看到:
3)同cookie不同的是,session中的數(shù)據(jù)不僅可以存放字符串,還可以存放數(shù)組和對(duì)象!請求的時(shí)候會(huì)字段的將cookie中的PHPSESSID帶到服務(wù)器端!服務(wù)器端,會(huì)通過提供的sessionid值,將session文件中的數(shù)據(jù)讀取出來!
"jay", "age"=>"23", "addr"=>"吉林省"); $_SESSION["voice"] = $name; ?>
運(yùn)行的結(jié)果如下:
array(3) { ["name"]=> string(3) "jay" ["age"]=> string(2) "23" ["addr"]=> string(9) "吉林省" }
注意:這里我們有必要討論一下,為什么cookie中不能存放數(shù)組之類的變量,而只能夠存放字符串!我們來看幾段代碼:
"jay", "age"=>"23", "addr"=>"吉林省"); $_SESSION["voice"] = $name; ?> 在session文件中存儲(chǔ)的數(shù)據(jù)如下: name|s:8:"maweibin";voice|a:3:{s:4:"name";s:3:"jay";s:3:"age";s:2:"23";s:4:"addr";s:9:"吉林省";} "jay", "age"=>"23", "addr"=>"吉林省"); setcookie("name",$name, $expires, "/talkphp/secondtalk/", "php.test.com"); ?> 此時(shí),我們調(diào)用一下這段腳本: 我們再看一段代碼: 運(yùn)行結(jié)果如下: array(2) { [""name""]=> string(7) "liangbo" [""age""]=> string(2) "23" }
雖然也取到了數(shù)據(jù),但是,cookie中的數(shù)據(jù)卻和session中的數(shù)據(jù)并不相同!但是,我們來看一下cookie文件中存儲(chǔ)的數(shù)據(jù)
person["name"]
liangbo
php.test.com/talkphp/secondtalk/
0
976582400
30365600
3634030379
30365591
person["age"]
23
php.test.com/talkphp/secondtalk/
0
976582400
30365600
3634060380
30365591
由此可見,cookie之所以不能夠保存數(shù)組或者是對(duì)象等變量,是因?yàn)閏ookie本身并沒有序列化,和反序列化這一步!這也提示我們,如果,我們手動(dòng)將將變量進(jìn)行了序列化和反序列化,就可以用cookie來存儲(chǔ)變量了!
4)刪除session數(shù)組需要注意的地方:我們可以使用unset()方法干掉$_SESSION[‘key’] ,這樣可以多帶帶的干掉一個(gè)值,此時(shí)$_SESSION數(shù)組依然存在!
但是,如果我們需要清空session中的全部數(shù)據(jù)的時(shí)候,是不能夠直接unset($_SESSION)。這樣在當(dāng)前腳本周期之內(nèi),超全局定義數(shù)組$_SESSION 就不存在了!我們也就沒有辦法操作session中的數(shù)據(jù)了!
我們來看一段代碼: 運(yùn)行如下: NULL array(0) { } NULL
從上面的代碼中,我們至少可以得出兩個(gè)結(jié)論:
① 開啟session機(jī)制前,$_SESSION數(shù)組是不存在的!
② $_SESSION 數(shù)組在腳本周期內(nèi),一旦被干掉,就不會(huì)再產(chǎn)生!即使重新開始session機(jī)制之后,該數(shù)組也并沒有出現(xiàn)!
因此,我們想要清空$_SESSION 中的數(shù)據(jù)的話,就需要使用$_SESSION = array()的形式,這樣能夠在腳本周期之內(nèi),保證$_SESSION數(shù)組的存在!
5)cookie中的值保存改變的問題!有的時(shí)候,我們需要對(duì)cookie中的值進(jìn)行重寫!如果,后面并沒有跟路徑名、域名、過期時(shí)間的話,簡單的進(jìn)行重寫就可以了!
但是,如果cookie中保存了這些參數(shù),而我們重新設(shè)定值的時(shí)候,并沒有設(shè)置相關(guān)參數(shù),這些參數(shù)還會(huì)被完整保留下來么?還是沒有了?看代碼:
從上面的代碼中,我們可以得出以下結(jié)論:
①原有cookie中保存的值,是否被后來的cookie值是否被覆蓋取決于,兩個(gè)參數(shù):
(1)path路徑
如果在同一個(gè)域名,但是不同的路徑下,設(shè)置了同名的cookie,那么該域名下回保存兩個(gè)cookie,依據(jù)路徑的不同,選擇使用哪一個(gè)cookie(因?yàn)閏ookie中的key相同,那么只能依靠path路徑進(jìn)行區(qū)分!)
(2)domain域名。很明顯,不同域名下的cookie肯定是兩個(gè),同名的話,也不沖突
6)cookie攜帶的問題②如果在同一個(gè)域名、同一個(gè)路徑下,設(shè)置了同名的cookie,那么后面的cookie值會(huì)覆蓋前面的值!
path路徑、過期時(shí)間、所在域名都以最后一個(gè)cookie的為準(zhǔn)!如果,該cookie并沒有設(shè)置這些參數(shù),那么cookie會(huì)話機(jī)制,會(huì)進(jìn)行自動(dòng)的填充!
path路徑,以當(dāng)前的運(yùn)行腳本路徑為準(zhǔn)! 過期時(shí)間,就是一個(gè)會(huì)話周期,瀏覽器關(guān)閉后,就消失! domain域名,就是url中的域名!
經(jīng)過試驗(yàn)證明,凡是從瀏覽器端發(fā)起的請求,在訪問同一個(gè)域名的時(shí)候,cookie是會(huì)被自動(dòng)攜帶到服務(wù)器端的,無論是通過url訪問、還是通過ajax調(diào)用訪問cookie都是會(huì)被自動(dòng)攜帶的!
注意:只有是從客戶端發(fā)起的請求,cookie才會(huì)被自動(dòng)攜帶!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20729.html
摘要:什么是會(huì)話機(jī)制這個(gè)太過抽象,也挺復(fù)雜的,只能說一下自己的理解。 ①什么是會(huì)話機(jī)制: 這個(gè)太過抽象,也挺復(fù)雜的,只能說一下自己的理解。在b/s架構(gòu)下,會(huì)話機(jī)制,其實(shí)就是服務(wù)器(server)和瀏覽器(browser)之間的對(duì)話的一種方式!這種對(duì)話方式,能夠使得web站點(diǎn)能夠?qū)τ脩舻男袨檫M(jìn)行追蹤,在同一個(gè)站點(diǎn)下用戶所需的數(shù)據(jù)實(shí)現(xiàn)共享! ②為什么要使用會(huì)話機(jī)制 歸根到底是由于,b/s的...
摘要:一的會(huì)話也稱為。如果啟動(dòng)會(huì)話成功,則函數(shù)返回,否則返回。會(huì)話啟動(dòng)后就可以載入該會(huì)話已經(jīng)注冊的會(huì)話變量以便使用。但數(shù)組創(chuàng)建的在會(huì)話結(jié)束后就會(huì)失效。預(yù)告本周三更新面試常考之網(wǎng)絡(luò)協(xié)議,敬請期待。 你好,是我琉憶,歡迎您來到PHP面試專欄。本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面試常考之會(huì)話控制周三:PHP面試常考之網(wǎng)絡(luò)協(xié)議周五:PHP面試常考題之會(huì)話控制和...
摘要:服務(wù)器給訪問者唯一的鑰匙,這個(gè)鑰匙被稱作。與合起來用來管理垃圾回收進(jìn)程啟動(dòng)的概率。例如意味著在每個(gè)請求中有的概率啟動(dòng)進(jìn)程。值為表示直到關(guān)閉瀏覽器。過期時(shí)間設(shè)置為秒啟動(dòng)概率設(shè)置為 什么是 Session 在 web 應(yīng)用開發(fā)中,Session 被稱為會(huì)話。主要被用于保存某個(gè)訪問者的數(shù)據(jù)。由于 HTTP 無狀態(tài)的特點(diǎn),服務(wù)端是不會(huì)記住客戶端的,對(duì)服務(wù)端來說,每一個(gè)請求都是全新的。既然如此,...
摘要:主要被用于保存某個(gè)訪問者的數(shù)據(jù)。服務(wù)器給訪問者唯一的鑰匙,這個(gè)鑰匙被稱作。例如官方給出的方案對(duì)于大量使用或者并發(fā)請求的網(wǎng)站而言,這可能是一個(gè)嚴(yán)重的問題。例如意味著在每個(gè)請求中有的概率啟動(dòng)進(jìn)程。因此對(duì)于不能跟蹤的文件系統(tǒng)也沒問題了。 什么是 Session 在 web 應(yīng)用開發(fā)中,Session 被稱為會(huì)話。主要被用于保存某個(gè)訪問者的數(shù)據(jù)。 由于 HTTP 無狀態(tài)的特點(diǎn),服務(wù)端是不會(huì)記...
閱讀 3727·2023-04-25 17:45
閱讀 3436·2021-09-04 16:40
閱讀 1003·2019-08-30 13:54
閱讀 2133·2019-08-29 12:59
閱讀 1403·2019-08-26 12:11
閱讀 3283·2019-08-23 15:17
閱讀 1525·2019-08-23 12:07
閱讀 3884·2019-08-22 18:00