摘要:理解還是那句。。。。而還不是很理解的,谷歌下,要理解這兩個東西其實也不難。。當(dāng)瀏覽器端禁用時,這個依然會被創(chuàng)建。其實我的理解很簡單不對的地方歡迎指出。。
session理解
1.session的概念還是那句。。。。新手上路。。大神歡迎指點
其實什么是session?什么是cookie?這些都是些老掉牙的問題了。。而做過相關(guān)的開發(fā)的人,基本都知道。。而還不是很理解的,谷歌下,要理解這兩個東西其實也不難。。那這里我就不去探討這個問題了。。
2.cookie與session的關(guān)系說下我的理解吧:
cookie和session的方案雖然分別屬于客戶端和服務(wù)端,但是服務(wù)端的session的實現(xiàn)對客戶端的cookie有依賴關(guān)系的;步驟大概如下:
服務(wù)端執(zhí)行Session機制
生成對應(yīng)而唯一的session_id(通過對這個session_id的解析和處理,服務(wù)端可以找到,該session保存的文件;再從文件中提取出session的信息)
服務(wù)端會將這個session_id發(fā)送給客戶端
客戶端接受到session_id,以cookie作為保存的容器保存起來
客戶端在每次請求的時候都會帶這個session_id給服務(wù)端
服務(wù)端自行解析session
注意:session保存信息的手段是多種的:緩存,數(shù)據(jù)庫,文件等;但是默認是文件形式保存。。。
問題:
禁用了cookie后,session還能使用嗎?
app就真的不可以使用session嗎?
為了探討上面的問題。。我們先看看 session 創(chuàng)建和銷毀的時機。。
3.創(chuàng)建 session和銷毀session的時機創(chuàng)建session的時候會附帶著創(chuàng)建一個cookie,它的MaxAge為-1,也就是說只能存在于內(nèi)存中。當(dāng)瀏覽器端禁用cookie時,這個cookie依然會被創(chuàng)建。
當(dāng)瀏覽器提交的請求中有jsessionid參數(shù)或cookie報頭時,容器不再新建session,而只是找到先前的session進行關(guān)聯(lián)。這里又分為兩種情況:
1)使用jsessionid。該值若能與現(xiàn)有的session對應(yīng),就不創(chuàng)建新的session,否則,仍然創(chuàng)建新的session。
2)使用cookie。該值若能與現(xiàn)有的session對應(yīng),也不創(chuàng)建新的session;但若沒有session與之對應(yīng)(就如上面的重啟服務(wù)器之后)容器會根據(jù)cookie信息恢復(fù)這個與之對應(yīng)的session,就好像是以前有過一樣。
session何時被銷毀?
當(dāng)我們關(guān)閉瀏覽器,再打開它,連接服務(wù)器時,服務(wù)器端會分配一個新的session,也就是說會啟動一個新的會話。那么原來的session是不是被銷毀了呢?我做了個小實驗:
創(chuàng)建一個session:
//啟動session的初始化 session_start(); //注冊session變量,并且賦值 $_SESSION["username"] = "hello" //輸出生成的session_id echo session_id();
訪問頁面創(chuàng)建session,獲取session_id,關(guān)閉瀏覽器;
根據(jù)session_id創(chuàng)建session對象
//上面輸出的session_id $session_id = "qpk6onnn3husvotnke030ftcm4"; session_id($session_id); session_start(); echo $_SESSION["username"];
結(jié)果可以取出 "hello"
由此可以看出:
當(dāng)瀏覽器關(guān)閉時,原session并沒有被銷毀(destory方法沒有執(zhí)行),而是等到timeout到期,才銷毀這個session。關(guān)閉瀏覽器只是在客戶端的內(nèi)存中清除了與原會話相關(guān)的cookie,再次打開瀏覽器進行連接時,瀏覽器無法發(fā)送cookie信息,所以服務(wù)器會認為是一個新的會話。因此,如果有某些與session關(guān)聯(lián)的資源想在關(guān)閉瀏覽器時就進行清理(如臨時文件等),那么應(yīng)該發(fā)送特定的請求到服務(wù)器端,而不是等到session的自動清理。
4.回歸問題。。其實我的理解很簡單(不對的地方歡迎指出)。。
只要有session_id就可以找到session。。。
cookie 是保存唯一識別(session_id)的手段;
禁用cookie 或者 本來就不支持cookie,但是通過其他手段,也能實現(xiàn)cookie實現(xiàn)的功能。服務(wù)器只要有session_id;還是能找到對應(yīng)的session的;只是session機制,內(nèi)部本來是通過cookie自動實現(xiàn)的。。。如果不采取cookie的話,就要自己去邏輯實現(xiàn)。。。感覺有點變味了,但是豬肉變質(zhì)了,還是豬肉啊。。。具體看自己怎么看。。。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25929.html
摘要:中的實現(xiàn)是基于。打開源碼的文件,我們可以看到最后的接口類中,主要有兩個函數(shù)。這個系列就此完結(jié)。 flask中session的實現(xiàn)是基于cookie。打開flask源碼的session.py文件,我們可以看到最后的接口類中,主要有open_session,save_session兩個函數(shù)。 class SecureCookieSessionInterface(SessionInterfa...
摘要:主要的作用是將維護的字典中鍵為對應(yīng)的值定義為。如果沒有,則會將當(dāng)前到中,同時將加入列表中否則添加。注意清理之后的動作。上述代碼涉及到,它強調(diào)必須是一個可調(diào)用對象。后期的工作之一是了解。這僅僅是我的個人理解。實際上這是解決多個實例運行的問題。 Flask 中的上下文對象 知乎問題 編程中什么是「Context(上下文)」 已經(jīng)能夠簡單地說明什么是 Context,它是一個程序需要的外部對...
摘要:理解原理及應(yīng)用一術(shù)語在我的經(jīng)驗里,這個詞被濫用的程度大概僅次于,更加有趣的是與在某些語境下的含義是相同的。其中的作用就是為了解決協(xié)議無狀態(tài)的缺陷所作出的努力。 理解HTTP session原理及應(yīng)用 一、術(shù)語session 在我的經(jīng)驗里,session這個詞被濫用的程度大概僅次于transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。 ...
摘要:好了,廢話不多說了,相信大家都知道的這三種狀態(tài)的含義,那我們就通過一張圖來開始我們的深入的三種狀態(tài)之旅吧。 原文地址: http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 學(xué)過hibernate的人都可能都知道hibernate有三種狀態(tài),transient(瞬時狀態(tài)),persistent(持久化狀態(tài))以及detac...
閱讀 3723·2021-11-11 11:00
閱讀 2198·2021-10-08 10:05
閱讀 2724·2021-10-08 10:04
閱讀 3224·2021-09-30 09:48
閱讀 3820·2021-09-27 14:10
閱讀 1717·2021-09-09 09:33
閱讀 2115·2019-08-30 15:55
閱讀 1619·2019-08-30 13:53