国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php中的會話機制(2)

ConardLi / 3402人閱讀

摘要:會話機制如果是基于的會話機制,在調用之前,是不能夠有任何實際的輸出的,即使是空格或者是空行因為函數調用的時候,其實是通過函數向中設置了這個,對應的是一個隨機的唯一的位字符串而前面是不可以有任何實際的輸出的注意這里的名字是在文件中進行的配置配

session 會話機制: 1)如果是基于cookie的會話機制,在調用session_start()之前,是不能夠有任何實際的輸出的,即使是空格或者是空行!
  

因為session_start()函數調用的時候,其實是通過setCookie()函數向cookie中設置了
PHPSESSID這個key,對應的value是一個隨機的、唯一的32位字符串! 而setCookie前面是不可以有任何實際的輸出的!

注意:這里的PHPSESSID名字是在php.ini文件中進行的配置!配置如下圖所示:

2)這里我們需要明白session_start()函數的作用究竟是什么:
  

①如果session機制是基于cookie的,那么當腳本第一次運行的時候
A、 在客戶端上session_start()函數會通過setCookie()函數向Cookie中保留一個key,默認情況下Key的名字是PHPSESSID,對應的值是一個32位的、唯一的、隨機的字符串!
B、 在服務器端,會產生一個以PHPSESSID的value值為名字的文件!其中保留的是session中的數據!同時,在腳本中創建$_SESSION超全局數組,并將session文件的數據反序列化,添加到$_SESSION數組中!

②當腳本第二次,及以后運行的時候
A、 瀏覽器端會自動攜帶COOKIE中的PHPSESSID對應的value值,將數據送至服務器端!
B、在服務器端,一旦開啟sessioin_start()的時候,會根據客戶端提供的sessionid去尋找對應的session文件,將session中的變量讀取出來!在腳本中創建$_SESSION超全局數組,將數據定義到$_SESSION數組中!

注意:$_SESION數組數組只有在調用session_start()函數之后,更確切確切的說,是開啟session機制之后]才會存在!之所以這樣說,是由于session_start()時,會先得到session_id,通過session_id找到對應的文件內容,然后進行反序列化!如果,我們接著使用session_id()函數來滯空session_id的話,我們就找不到session中的內容了!
同時,$_SESSION是超全局定義數組,他和常量一樣,并沒有作用域的概念!幾乎在哪里都可以使用!


  

接下來,我們來看一點代碼!當我們第一次運行這個腳本,腳本代碼如下 腳本A中的代碼:

  
  

服務器端保存session文件夾中的的文件入下:

代碼中的保值至如下:

在客戶端保存了一個cookie文件,內容如下:

通過觀察我們可以發現:PHPSESSIONID對應的value值和服務器端session文件的文件名是一致的!

第二次及其以后運行這個腳本的時候,在服務器端,并沒有什么變化

在客戶端,發起http請求的時候,我們可以看到:

  

請求的時候會字段的將cookie中的PHPSESSID帶到服務器端!服務器端,會通過提供的sessionid值,將session文件中的數據讀取出來!

3)同cookie不同的是,session中的數據不僅可以存放字符串,還可以存放數組和對象!
"jay", "age"=>"23", "addr"=>"吉林省");
$_SESSION["voice"] = $name;
?>

  

運行的結果如下:

array(3) { ["name"]=> string(3) "jay" ["age"]=> string(2) "23" ["addr"]=> string(9) "吉林省" }
  

注意:這里我們有必要討論一下,為什么cookie中不能存放數組之類的變量,而只能夠存放字符串!我們來看幾段代碼:

"jay", "age"=>"23", "addr"=>"吉林省");
$_SESSION["voice"] = $name;
?>
在session文件中存儲的數據如下:
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");
?>
此時,我們調用一下這段腳本:


我們再看一段代碼:

運行結果如下:
array(2) { [""name""]=> string(7) "liangbo" [""age""]=> string(2) "23" }

雖然也取到了數據,但是,cookie中的數據卻和session中的數據并不相同!但是,我們來看一下cookie文件中存儲的數據
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之所以不能夠保存數組或者是對象等變量,是因為cookie本身并沒有序列化,和反序列化這一步!這也提示我們,如果,我們手動將將變量進行了序列化和反序列化,就可以用cookie來存儲變量了!

4)刪除session數組需要注意的地方:

我們可以使用unset()方法干掉$_SESSION[‘key’] ,這樣可以多帶帶的干掉一個值,此時$_SESSION數組依然存在!
但是,如果我們需要清空session中的全部數據的時候,是不能夠直接unset($_SESSION)。這樣在當前腳本周期之內,超全局定義數組$_SESSION 就不存在了!我們也就沒有辦法操作session中的數據了!

我們來看一段代碼:

運行如下:
NULL     array(0) { }    NULL

從上面的代碼中,我們至少可以得出兩個結論:
① 開啟session機制前,$_SESSION數組是不存在的!
② $_SESSION 數組在腳本周期內,一旦被干掉,就不會再產生!即使重新開始session機制之后,該數組也并沒有出現!

因此,我們想要清空$_SESSION 中的數據的話,就需要使用$_SESSION = array()的形式,這樣能夠在腳本周期之內,保證$_SESSION數組的存在!

5)cookie中的值保存改變的問題!

有的時候,我們需要對cookie中的值進行重寫!如果,后面并沒有跟路徑名、域名、過期時間的話,簡單的進行重寫就可以了!
但是,如果cookie中保存了這些參數,而我們重新設定值的時候,并沒有設置相關參數,這些參數還會被完整保留下來么?還是沒有了?看代碼:


  


  


從上面的代碼中,我們可以得出以下結論:

  

①原有cookie中保存的值,是否被后來的cookie值是否被覆蓋取決于,兩個參數:
(1)path路徑
如果在同一個域名,但是不同的路徑下,設置了同名的cookie,那么該域名下回保存兩個cookie,依據路徑的不同,選擇使用哪一個cookie(因為cookie中的key相同,那么只能依靠path路徑進行區分!)
(2)domain域名。很明顯,不同域名下的cookie肯定是兩個,同名的話,也不沖突

  

②如果在同一個域名、同一個路徑下,設置了同名的cookie,那么后面的cookie值會覆蓋前面的值!
path路徑、過期時間、所在域名都以最后一個cookie的為準!如果,該cookie并沒有設置這些參數,那么cookie會話機制,會進行自動的填充!
path路徑,以當前的運行腳本路徑為準! 過期時間,就是一個會話周期,瀏覽器關閉后,就消失! domain域名,就是url中的域名!

6)cookie攜帶的問題

經過試驗證明,凡是從瀏覽器端發起的請求,在訪問同一個域名的時候,cookie是會被自動攜帶到服務器端的,無論是通過url訪問、還是通過ajax調用訪問cookie都是會被自動攜帶的!
注意:只有是從客戶端發起的請求,cookie才會被自動攜帶!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20729.html

相關文章

  • php中的會話機制(1)

    摘要:什么是會話機制這個太過抽象,也挺復雜的,只能說一下自己的理解。 ①什么是會話機制: 這個太過抽象,也挺復雜的,只能說一下自己的理解。在b/s架構下,會話機制,其實就是服務器(server)和瀏覽器(browser)之間的對話的一種方式!這種對話方式,能夠使得web站點能夠對用戶的行為進行追蹤,在同一個站點下用戶所需的數據實現共享! ②為什么要使用會話機制 歸根到底是由于,b/s的...

    Anchorer 評論0 收藏0
  • PHP面試常考之會話控制

    摘要:一的會話也稱為。如果啟動會話成功,則函數返回,否則返回。會話啟動后就可以載入該會話已經注冊的會話變量以便使用。但數組創建的在會話結束后就會失效。預告本周三更新面試常考之網絡協議,敬請期待。 你好,是我琉憶,歡迎您來到PHP面試專欄。本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面試常考之會話控制周三:PHP面試常考之網絡協議周五:PHP面試常考題之會話控制和...

    lsxiao 評論0 收藏0
  • PHP --- Session

    摘要:服務器給訪問者唯一的鑰匙,這個鑰匙被稱作。與合起來用來管理垃圾回收進程啟動的概率。例如意味著在每個請求中有的概率啟動進程。值為表示直到關閉瀏覽器。過期時間設置為秒啟動概率設置為 什么是 Session 在 web 應用開發中,Session 被稱為會話。主要被用于保存某個訪問者的數據。由于 HTTP 無狀態的特點,服務端是不會記住客戶端的,對服務端來說,每一個請求都是全新的。既然如此,...

    stackfing 評論0 收藏0
  • 關于 PHP 中 Session 的幾個問題

    摘要:主要被用于保存某個訪問者的數據。服務器給訪問者唯一的鑰匙,這個鑰匙被稱作。例如官方給出的方案對于大量使用或者并發請求的網站而言,這可能是一個嚴重的問題。例如意味著在每個請求中有的概率啟動進程。因此對于不能跟蹤的文件系統也沒問題了。 什么是 Session 在 web 應用開發中,Session 被稱為會話。主要被用于保存某個訪問者的數據。 由于 HTTP 無狀態的特點,服務端是不會記...

    CoyPan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<