1)現象:#HTTP協定是無狀態的協定,Web伺服器本身無法辨識出哪些請求是同一個瀏覽器發出的,瀏覽器的每個請求都是完全孤立的。
2)解決:借助會話狀態,Web伺服器能夠把屬於同一會話中的一系列請求和回應過程關聯起來。
3)實作:需要瀏覽器對其發出的每個請求訊息都進行標識。 這個識別稱為會話ID(SessionID)。
一:存在兩種類型的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的值,保存的時候先序列化再寫入。
cookie#。
若已存在就檢索出來使用, 否則為此客戶建立一個session,並產生一個與此session 相關聯的sessionID,用set-cookie 方式傳遞給請求,那麼下次請求發出時,就會使用此sessionID 作為cookie 中名為"JESESSIONID"的值進行傳遞sessionID。 4)儲存方式:最常用的是用 cookie 儲存。但如果 cokkie 被停用,必須有其他機制來保存。如URL重寫:把 sessionID 附加在URL路徑後面。 5)注意:由於是通常是用cookie 來保存的,所以如果讓cookie 持久化就可以在重啟瀏覽器後也能取得到該sessionID。 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)。 1)呼叫HttpSession 的invalidate()方法。 2)HttpSession 超過過期時間自動銷毀,可以在 Tomcat 的 web.xml 檔案中配置 Session 的最大時效, 單位是分鐘。 以上是cookie和session的會話和會話狀態講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!//用持久化cookie保存sessionIDCookie cookie = new Cookie("JESESSIONID",session.getId());
cookie.setMaxAge(20);
response.addCookie(cookie);
2. Session的建立
3. 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><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><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"><pre class="brush:php;toolbar:false">重新登录
重新登录