成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

session理解

phpmatt / 2054人閱讀

摘要:理解還是那句。。。。而還不是很理解的,谷歌下,要理解這兩個東西其實也不難。。當(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

相關(guān)文章

  • 深入理解flask框架(4):session

    摘要:中的實現(xiàn)是基于。打開源碼的文件,我們可以看到最后的接口類中,主要有兩個函數(shù)。這個系列就此完結(jié)。 flask中session的實現(xiàn)是基于cookie。打開flask源碼的session.py文件,我們可以看到最后的接口類中,主要有open_session,save_session兩個函數(shù)。 class SecureCookieSessionInterface(SessionInterfa...

    PingCAP 評論0 收藏0
  • 深入 Flask 源碼理解 Context

    摘要:主要的作用是將維護的字典中鍵為對應(yīng)的值定義為。如果沒有,則會將當(dāng)前到中,同時將加入列表中否則添加。注意清理之后的動作。上述代碼涉及到,它強調(diào)必須是一個可調(diào)用對象。后期的工作之一是了解。這僅僅是我的個人理解。實際上這是解決多個實例運行的問題。 Flask 中的上下文對象 知乎問題 編程中什么是「Context(上下文)」 已經(jīng)能夠簡單地說明什么是 Context,它是一個程序需要的外部對...

    ninefive 評論0 收藏0
  • 理解HTTP session原理及應(yīng)用

    摘要:理解原理及應(yīng)用一術(shù)語在我的經(jīng)驗里,這個詞被濫用的程度大概僅次于,更加有趣的是與在某些語境下的含義是相同的。其中的作用就是為了解決協(xié)議無狀態(tài)的缺陷所作出的努力。 理解HTTP session原理及應(yīng)用 一、術(shù)語session 在我的經(jīng)驗里,session這個詞被濫用的程度大概僅次于transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。 ...

    dreamGong 評論0 收藏0
  • 深入理解hibernate的三種狀態(tài)

    摘要:好了,廢話不多說了,相信大家都知道的這三種狀態(tài)的含義,那我們就通過一張圖來開始我們的深入的三種狀態(tài)之旅吧。 原文地址: http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 學(xué)過hibernate的人都可能都知道hibernate有三種狀態(tài),transient(瞬時狀態(tài)),persistent(持久化狀態(tài))以及detac...

    Scorpion 評論0 收藏0

發(fā)表評論

0條評論

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