一、會話概述
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
);
|
|————->4.request(SESSION_ID)—— —>|
5. session_start();
|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。 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 的最大時效, 單位是分鐘。 相关方法签名: int getMaxInactiveInterval() //返回最大时效,单位:秒 void setMaxInactiveInterval(int interval) //设置最大时效 3)服务器卸载当前 WEB 应用。 String getId() //得到sessionID boolean isNew() //该session是不是新创建的 long getCreationTime() //该session被创建的时间 long getLastAccessedTime() //该session最后一次被访问的时间 void setAttribute(String key, Object value) //存放值,相当于哈希表 Object getAttrbute(String key) //根据键从session中取得对应的值 方法签名:String encodeURL(String url) //该方法会在URL后面加上sessionID //用持久化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>
4.Session相关方法
5.URL重写实现Session跟踪
重新登录
重新登录
以上是cookie和session的會話和會話狀態講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),