目錄
一、會話概述" >一、會話概述
二、Cookie" >二、Cookie
" >1. 概念
在Web開發環境中,session 是指一類別用來在客戶端與伺服器之間保持狀態的解決方案。保持HTTP狀態資訊。檢查這個客戶端的請求裡是否包含了一個session 標識(即sessionID),即請求裡是否" > 意義:在Web開發環境中,session 是指一類別用來在客戶端與伺服器之間保持狀態的解決方案。保持HTTP狀態資訊。檢查這個客戶端的請求裡是否包含了一個session 標識(即sessionID),即請求裡是否
2. Session的建立" >2. Session的建立
3. Session物件的銷毀" >3. Session物件的銷毀
4.Session相关方法" >4.Session相关方法
5.URL重写实现Session跟踪" >5.URL重写实现Session跟踪
首頁 Java java教程 cookie和session的會話和會話狀態講解

cookie和session的會話和會話狀態講解

Jul 17, 2017 pm 02:30 PM
會話 狀態

一、會話概述

1)現象:#HTTP協定是無狀態的協定,Web伺服器本身無法辨識出哪些請求是同一個瀏覽器發出的,瀏覽器的每個請求都是完全孤立的。

2)解決:借助會話狀態,Web伺服器能夠把屬於同一會話中的一系列請求和回應過程關聯起來。

3)實作:需要瀏覽器對其發出的每個請求訊息都進行標識。 這個識別稱為會話ID(SessionID)。

 

二、Cookie

一:存在兩種類型的cookie:

1>會話cookie (session cookie)

       不設定過期時間,則表示這個cookie生命週期為瀏覽器會話期間,只要關閉瀏覽器窗口,   cookie就消失了。

       生命期為瀏覽器會話期。

       一般不保存在硬碟上而是保存在記憶體裡。

2>持久性cookie (persistent cookies)

       設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie依然有效直到超過設定的過期時間。

       保存在使用者硬碟上,相同瀏覽器可取得。

二: session相關知識

2.1: 什麼是session?

       Session 是一種保存情境資訊的機制,它是針對每個使用者的,變數的值保存在伺服器端,透過sessionid來區分不同的客戶,session是以cookie或url重      寫為基礎.

2.2: session  的工作原則

client———>1.request————————->server

                                      );

   |<————-3.reponse(SESSION_ID)<——–|

   |————->4.request(SESSION_ID)—— —>|

                       5. session_start();

   |<—————6.reponse(SESSION_ID)— |<——— -6.reponse(SESSION_ID)#1— | ———->7. request(SESSION_ID + logout)–>|

                      8. session_destroy();

#1  ookie|文件)<——-|

 

 

client開啟網頁,向server發出請求,client上由於沒有對應的cookie檔案存在,在請求中不輸送SESSION_ID

伺服器在接受到client的請求後,透過執行session_start()函數開始進行session的處理, 首先確認請求中有沒有SESSION_ID,如果沒有的話,發行一個新的SESSION_ID;如果有的話, 則呼叫那個存有SESSION_ID的文件,並把資訊寫入$_SESSION裡去,並存入以sess_開頭的文件裡。

把寫入資訊的$_SESSION參數傳回給client,client在GET伺服器發來的資訊後,把這些資訊保存在cookie裡。

client把cookie裡的SESSION_ID一起寫入header後再向server發出請求。重複1-3的操作

client發出登出請求

伺服器接受請求後,透過執行session_destroy()函數開始刪除session檔案處理

伺服器向client發出刪除儲存在client上的cookie檔的指令:   setcookie(session_name(), ”, time()-60, '/');

 

#2.3: 注意

#通常情況下是不能跨視窗使用,但用sessionid保存在持久cookie中,然後在從新視窗中讀取,就可以得到sessionid,實現跨視窗的使用.

    在大瀏覽量的網站, session不保險,可能會出現重複的sessionid.

    Session ID不能從硬碟上的Cookie檔取得,如果想在客戶端獲知自己的Session ID,只能透過Javascrīpt來讀取。

2.4 php使用及設定

        Session_start() :開始一個會話或傳回已經存在的會話。發生以下錯誤。

如果在session.auto_start=1,會讓session_save_path (‘./t/’);變的無效。因為後一條語句須放前面。

 

2.5 增加PHP的Session儲存與處理能力

      ;session.save_path = 「N;MODE;/path」  這項設定提供給我們可以給session目錄進行多層雜湊,其中「N」表示要設定的目錄級數,

      「MODE」表示目錄的權限屬性,預設為600

 

 2.6 :多伺服器共享php的SESSION

    1、NFS或Samba共享的方法,讓各個伺服器上存放session檔案的磁碟共享,這種方法簡單可行。

    2、集中儲存到資料庫中,這是比較多的實作方法,透過php提供的session_set_save_handler()函數來重定義session函數,建議使用此方法。

 

三: cookie知識

     什麼是 Cookie?其運作方式如何?Cookie 是一小段文字訊息,伴隨著使用者請求和頁面在 Web 伺服器和瀏覽器之間傳遞。當使用者每次造訪網站時,Web 應用程式都可以讀取 Cookie 包含的資訊。 Cookie 的基本運作方式如果使用者再次造訪網站上的頁面,當該使用者輸入 URLwww.*****.com時,瀏覽器就會在本機硬碟上尋找與該 URL 相關聯的 Cookie。如果該 Cookie 存在,瀏覽器就會將它與頁面請求一起傳送到您的網站。 Cookie 有哪些用途?最根本的用途是:Cookie 能夠幫助 Web 網站保存有關訪客的資訊。更概括地說,Cookie 是一種保持Web 應用程式連續性(即執行「狀態管理」)的方法.使Web 網站記住您.

#1、客戶端執行程式請求伺服器發回請求結果並且產生一個cookie給客戶端所以第二次刷新的時候才會有cookie的出現
2、session是保存在記憶體中,跟進程是同時存在的會話cookie,但是此時伺服器端還保存有session檔案需要設定時間來刪除session檔案
3、Cookie是在本地Cookie檔案中保存一些訊息,Cookie檔案中保存的是鍵值對(key-value)。 Cookie檔案存放於你本機電腦系統碟的Document   and   Settings/使用者名稱   目錄下。如果你造訪的網站的名稱為www.abc.com,那麼一般來說,Cookie檔案的名稱為   使用者名稱@abc.com,你可以自己打開資料夾看看。你提到的getName獲得的是保存在Cookie檔案中某一個Cookie的key值。

我們知道,session是在伺服器端保持使用者會話資料的一種方法,對應的cookie是在客戶端保持使用者資料。 HTTP協定是一種無狀態協議,伺服器回應完後就失去了與瀏覽器的聯繫,最早,Netscape將cookie引入瀏覽器,使得資料可以客戶端跨頁面交換,那麼伺服器是如何記住眾多使用者的會話數據呢?
首先要將客戶端和伺服器端建立一一聯繫,每個客戶端都得有一個唯一標識,這樣伺服器才能識別出來。建議唯一識別的方法有兩種:cookie或透過GET方式指定。預設配置的PHP使用session的時會建立一個名叫」PHPSESSID」的cookie(可以透過php.ini修改session.name值指定),如果客戶端停用cookie,你也可以指定透過GET方式把session id傳到伺服器(修改php.ini中session.use_trans_sid等參數)。
我們查看伺服器端session.save_path目錄會發現很多類似sess_vv9lpgf0nmkurgvkba1vbvj915這樣的文件,這個其實就是session id “vv9lpgf0nmkurgvkba1vbvj915〃伺服器上的資料。vv9lpgf0nmkurgvkba1vbvj915〃伺服器上的資料。找到對應的文件,讀取的時候對文件內容進行反序列化就得到session的值,保存的時候先序列化再寫入。

1. 概念

1)

意義:在Web開發環境中,session 是指一類別用來在客戶端與伺服器之間保持狀態的解決方案。保持HTTP狀態資訊。檢查這個客戶端的請求裡是否包含了一個session 標識(即sessionID),即請求裡是否

存放了名為"JESESSIONID",值為sessionID 的

cookie#。

若已存在就檢索出來使用,

  • 否則為此客戶建立一個session,並產生一個與此session 相關聯的sessionID,用set-cookie 方式傳遞給請求,那麼下次請求發出時,就會使用此sessionID 作為cookie 中名為"JESESSIONID"的值進行傳遞sessionID。

  • 4)儲存方式:最常用的是用 cookie 儲存。但如果 cokkie 被停用,必須有其他機制來保存。如URL重寫:把 sessionID 附加在URL路徑後面。

    5)注意:由於是通常是用cookie 來保存的,所以如果讓cookie 持久化就可以在重啟瀏覽器後也能取得到該sessionID。

    //用持久化cookie保存sessionIDCookie cookie = new Cookie("JESESSIONID",session.getId());
    cookie.setMaxAge(20);
    response.addCookie(cookie);
    登入後複製

     

    2. Session的建立

    1)# Session 屬性

    • 若page 指定的Session 屬性預設為true,那麼 第一次存取一個WEB 套用的一個JSP 頁面時,該頁面都必須有一個和這個請求相關聯的Session 物件。

    • 否則JSP 頁面不會要求一定有一個Session 物件和目前的JSP 頁面相關聯,所以第一次造訪JSP頁面時不會建立一個Session 。

    2)request.getSession(boolean flag):

    • true,則一定會傳回一個HttpSession 對象,如果已經有和目前JSP 頁面關聯的HttpSession對象,直接傳回;如果沒有,則建立一個新的返回。

    • false,則若沒有和目前JSP頁面關聯的 HttpSession 物件傳回null,否則傳回取得的HttpSession物件。

    • request.getSession() 相當於 request.getSession(true)。

     

    3. Session物件的銷毀

    1)呼叫HttpSession 的invalidate()方法。

    2)HttpSession 超過過期時間自動銷毀,可以在 Tomcat 的 web.xml 檔案中配置 Session 的最大時效, 單位是分鐘。

    <!-- apache-tomcat-x.x.xx\conf\web.xml --><session-config><session-timeout>30</session-timeout></session-config>#<p> </p>
    <p><span style="color: #000000"><em>相关方法签名:</em></span></p>
    <ul class=" list-paddingleft-2">
    <li><p><span style="color: #000000">int getMaxInactiveInterval()                         //返回最大时效,单位:秒</span></p></li>
    <li><p><span style="color: #000000">void setMaxInactiveInterval(int interval)      //设置最大时效</span></p></li>
    </ul>
    <p><span style="color: #000000">3)服务器卸载当前 WEB 应用。</span></p>
    <p> </p>
    <h2 id="span-style-color-Session相关方法-span"><span style="color: #000000">4.Session相关方法</span></h2>
    <p><span style="color: #000000">String getId()                                                       //得到sessionID</span></p>
    <p><span style="color: #000000">boolean isNew()                                                  //该session是不是新创建的<br></span></p>
    <p><span style="color: #000000">long getCreationTime()                                       //该session被创建的时间<br></span></p>
    <p><span style="color: #000000">long getLastAccessedTime()                              //该session最后一次被访问的时间</span></p>
    <p><span style="color: #000000">void <span style="color: #ff0000">setAttribute</span>(String key, Object value)         //存放值,相当于哈希表<br></span></p>
    <p><span style="color: #000000">Object <span style="color: #ff0000">getAttrbute</span>(String key)                           //根据键从session中取得对应的值</span></p>
    <p> </p>
    <h2 id="span-style-color-URL重写实现Session跟踪-span"><span style="color: #000000">5.URL重写实现Session跟踪</span></h2>
    <p><span style="color: #000000"><em>方法签名:</em>String encodeURL(String url)  //该方法会在URL后面加上sessionID</span></p>
    <div class="cnblogs_code"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">重新登录
    登入後複製
    登入後複製
    重新登录
    登入後複製

     

    以上是cookie和session的會話和會話狀態講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.聊天命令以及如何使用它們
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    處於待機狀態的連線狀態:已斷開,原因:NIC合規性 處於待機狀態的連線狀態:已斷開,原因:NIC合規性 Feb 19, 2024 pm 03:15 PM

    「事件日誌訊息中的連接狀態顯示為待機狀態:已斷開連接,原因是符合NIC標準。這表示系統在待機模式下,網路介面卡(NIC)已斷開連接。雖然這通常是網路問題,但也可能由軟體和硬體衝突引起。在接下來的討論中,我們將探討如何解決這個問題。」待機連接斷開的原因是什麼? NIC合規性?如果在Windows事件檢視器中發現「ConnectivityStatusinStandby:DisConnected,Reason:NICCompliance」訊息,這表示您的NIC或網路介面控制器可能有問題。這種情況通常

    陌陌狀態怎麼設定 陌陌狀態怎麼設定 Mar 01, 2024 pm 12:10 PM

    陌陌這款廣為人知的社群平台,為用戶的日常社交提供了豐富的功能服務。在陌陌上,用戶可以輕鬆分享生活狀態、結交朋友、進行聊天等。其中設定狀態功能讓使用者能夠向其他展示自己當前的心情和狀態,進而吸引更多人的注意和交流。那麼究竟該如何設定自己的陌陌狀態呢,以下就為大家帶來詳細的內容介紹!陌陌怎麼設定狀態? 1.打開陌陌,點擊右下角更多,找到並點擊每日狀態。 2、選擇狀態。 3、即可顯示設定的狀態。

    如何查看伺服器狀態 如何查看伺服器狀態 Oct 09, 2023 am 10:10 AM

    查看伺服器狀態的方法有使用命令列工具、圖形介面工具、監控工具、日誌檔案和遠端管理工具等。詳細介紹:1、使用命令列工具,在Linux或Unix伺服器上,可以使用命令列工具來查看伺服器的狀態;2、使用圖形介面工具,對於具有圖形介面的伺服器作業系統,可以使用系統提供的圖形介面工具來查看伺服器狀態;3、使用監控工具,可以使用專門的監控工具來即時監視伺服器的狀態等等。

    如何在安卓手機上的WhatsApp上離線顯示 如何在安卓手機上的WhatsApp上離線顯示 Jul 14, 2023 am 08:21 AM

    想要顯示為「離線」或不想在WhatsApp上與您的朋友分享您的目前狀態?有一個簡單而巧妙的技巧可以做到這一點。您可以調整WhatsApp設置,以便您的朋友或其他人無法在其中看到您的當前狀態(離線或上次看到)。如何在您的WhatsApp狀態列上顯示為離線狀態?這是一個非常簡單和簡化的過程。因此,請立即執行以下步驟。步驟1–在手機上開啟WhatsApp。步驟2–點選⋮並選擇開啟「設定」。步驟3–打開“隱私”設定以存取它。步驟4–在該隱私頁面上,開啟「上次查看和線上」設定以存取該設定。步驟5–將「誰可

    Java執行緒的五種狀態詳解及狀態轉換規則 Java執行緒的五種狀態詳解及狀態轉換規則 Feb 19, 2024 pm 05:03 PM

    深入了解Java執行緒的五種狀態及其轉換規則一、執行緒的五種狀態介紹在Java中,執行緒的生命週期可以分為五個不同的狀態,包括新狀態(NEW)、就緒狀態(RUNNABLE)、運作狀態(RUNNING)、阻塞狀態(BLOCKED)和終止狀態(TERMINATED)。新建狀態(NEW):當執行緒物件建立後,它就處於新建狀態。此時,線程物件已經分配了足夠的資源來執行任務

    在Slim框架中使用會話(Sessions)實現使用者登入和登出的方法 在Slim框架中使用會話(Sessions)實現使用者登入和登出的方法 Jul 28, 2023 pm 11:21 PM

    在Slim框架中使用會話(Sessions)實現使用者登入和登出的方法簡介:會話(Sessions)是Web應用程式中常用的技術,它可以用來儲存和管理使用者相關的數據,例如使用者的登入狀態等。 Slim框架作為一個輕量的PHP框架,提供了簡潔的API來處理會話。本文將介紹如何在Slim框架中使用會話來實現使用者登入和登出的功能。安裝Slim框架首先,我們需要在P

    在Slim框架中使用會話(Sessions)進行使用者認證的方法 在Slim框架中使用會話(Sessions)進行使用者認證的方法 Jul 28, 2023 pm 05:57 PM

    在Slim框架中使用會話(Sessions)進行使用者認證的方法在Web應用程式中,使用者認證是一個重要的功能,它確保只有被授權的使用者可以存取受限資源。會話(Sessions)是一種常用的認證方法,透過儲存使用者身分和狀態訊息,確保使用者在整個會話期間保持認證狀態。 Slim框架提供了方便的工具和中間件來處理會話和使用者認證。下面我們將介紹如何在Slim框架中使用會話進

    了解印表機離線狀態 了解印表機離線狀態 Jan 04, 2024 am 10:29 AM

    當我們在電腦上看到印表機處於離線狀態時,有時我們可能不知道這意味著什麼。實際上,這表示印表機沒有連接印表機離線狀態是什麼意思呀:答:離線狀態指的是印表機沒有連線可能的原因是印表機沒有開啟或沒有正常連線印表機狀態解決方法重寫內容而不改變原意時,需要將語言改寫為中文,不需要出現原句1、先確認你的印表機正常開啟,如果沒有的話就打開它。使用另一種方​​法:1、如果您的印表機已經打開,您可以先進入「控制台」然後,點擊「檢視裝置和印表機」選項3、接下來選擇您的印表機,點擊「查看目前正在列印的內容」最

    See all articles