摘要:發現有很多朋友一直誤以為和,和是對等的,特意寫了一篇文章討論一下他們之間的關系,免得在面試中掉坑以及在項目中出錯上述代碼會產生怎么樣的結果報級別錯誤這個頁面的值不難將會報出一個錯誤因為的返回值具有慢一拍特性在頁面中設置后當客戶端第一次訪問時
發現有很多朋友一直誤以為Session和$_SESSION,Cookie和$_COOKIE是對等的,特意寫了一篇文章討論一下他們之間的關系,免得在面試中掉坑以及在項目中出錯
上述代碼會產生怎么樣的結果?
a.php: //報notice級別錯誤[echo $_COOKIE[‘a’]
這個頁面的值不難,將會報出一個notice( Undefined index: a)錯誤,因為Cookie的返回值具有慢一拍特性,在頁面中設置setcookie后,當客戶端第一次訪問時,需要把Cookie鍵值對包含在http響應頭返 回給客戶端,當你下次訪問的時候,客戶端會著這份具有Cookie值的請求頭請求服務器,服務器進行一系列判斷(包括對Cookie值范圍,Cookie有效期),也就知道當前的客戶端存在這一份Cookie值,調用顯示出來,然后再用 到其他業務邏輯.。
b.php: //abc
這個頁面的值是abc,其實第一次看到這個答案我也很驚訝,感覺上Cookie值不是在A頁面被unset掉了嗎?怎么還會有呢?
其實原理是這樣的:
我們一直對Cookie/Session,$_COOKIE /$_SESSION混為一談了,其實呢,這四個(兩組)是獨立開來的,Cookie/Session是屬于http協議里的值,$_COOKIE /$_SESSION是屬于php里面的全局變量.我們在setcookie的時候,實際上給http協議中的Cookie賦值,而http中的Cookie 與php中的超全局變量$_COOKIE自動關聯上(注意只是關聯上,類似傳值賦值的關系).所以$_COOKIE才有這個值abc,并不是直接將值賦給$_COOKIE超全局變量上的.所以同樣道 理,unset($_COOKIE)銷毀的是$_COOKIE這個變量,與http頭中的Cookie值無關(壓根沒有影響到),所以在b.php依舊可以打印出來(再輸出時$_COOKIE[‘a’]依舊從http協議的Cookie拷貝值)。
解決辦法就是 setcookie(a,”,-1)將這個Cookie設置為過期,那么b.php就不能再獲取到了.
————————————分割線————————————–
類似的道理也可以用到Session機制里,
在這幅圖里,最終還是能夠打印出$_SESSION的值,因為Session_destroy將http中的Session和超全局變量$_SESSION的關系分離了,并且銷毀當前Session_id對應的Session值,詳見手冊
Session_destroy 是把Session和$_SESSION之間的關系割開了,如果你想重新恢復Session函數功能,你就要重新打開session_start(),;例如下圖,
Session_unset和普通unset是一個道理,但操作的是HTTP協議中的Session值,可看手冊
這樣子Session值就會被順利刪掉,那么與它關聯的$_SESSION超全局變量值也就消失了
總結:
session_unset銷毀的不是$_SESSION這個變量值,而是http中的Session值.具體可以自己分別開啟與不開啟session_start然后session_unset進行實驗 unset這個函數不同,unset直接操作變量,Cookie和$_COOKIE是傳值賦值關系 session_destroy的作用是將SESSION與$_SESSION之間的聯系切除掉 $_SESSION/Session值,$_COOKIE/Cookie值不是對等的,cookie/Session操作著$_COOKIE/$_SESSION變量值,所以在進行函數操作的時候一定要搞明白,他究竟是對變量操作還是http協議操作! 讓Cookie過期最好的策略是將它過期而不是unset.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21512.html
摘要:前言,又稱為會話控制,存儲特定用戶會話所需的屬性及配置信息。類先看構造函數居然啥屁事都沒干。由此基本得出推斷,并不是服務器原生支持,而是由服務程序自己創建管理。類老規矩,先看構造函數接收了實例傳來和,其他沒有做什么。 前言 Session,又稱為會話控制,存儲特定用戶會話所需的屬性及配置信息。存于服務器,在整個用戶會話中一直存在。 然而: session 到底是什么? session...
摘要:客戶端發起非登錄請求時,服務端通過中的找到對應的來知道此次請求是誰發出的。數量隨著登錄用戶的增多而增多,存儲會增加很多。還記得在上家公司做全干工程師的時候,基本從頁面寫到運維,當時做登錄這塊的時候,被session、cookie、token各種概念差點整蒙圈了,上網查詢相關概念,發現很多人都是類似的疑惑,比如:showImg(https://user-gold-cdn.xitu.io/201...
摘要:的作用就是為了解決協議無狀態的缺陷所作的努力。的內容主要包括名字,值,過期時間,路徑和域。這種生命期為瀏覽器會話期的被稱為會話。而機制采用的是一種在服務器端保持狀態的解決方案。中的有效期默認分鐘,也就是說,客戶端超過分鐘,當前就會失效。 會話控制是什么? cookie和session都是跟蹤整個會話過程的技術手段。而會話,就是用戶通過瀏覽器和服務器的一次通話。 為什么要有會話控制? 因...
摘要:什么是鑒權鑒權是指驗證用戶是否擁有訪問系統的權利。傳統的鑒權是通過密碼來驗證的。這種方式的前提是,每個獲得密碼的用戶都已經被授權。接下來就一一介紹一下這三種鑒權方式。 在系統級項目開發時常常會遇到一個問題就是鑒權,身為一個前端來說可能我們距離鑒權可能比較遠,一般來說我們也只是去應用,并沒有對權限這一部分進行深入的理解。 什么是鑒權 鑒權:是指驗證用戶是否擁有訪問系統的權利。傳統的鑒權是...
閱讀 3328·2023-04-26 00:07
閱讀 3922·2021-11-23 10:08
閱讀 2940·2021-11-22 09:34
閱讀 859·2021-09-22 15:27
閱讀 1749·2019-08-30 15:54
閱讀 3743·2019-08-30 14:07
閱讀 913·2019-08-30 11:12
閱讀 678·2019-08-29 18:44