HTTP是無狀態(tài)協(xié)議紧憾,這意味著每次客戶端檢索網(wǎng)頁時(shí)稿辙,都要單獨(dú)打開一個(gè)服務(wù)器連接嘱巾,因此服務(wù)器不會(huì)記錄下先前客戶端請求的任何信息授嘀。
網(wǎng)絡(luò)服務(wù)器可以指定一個(gè)唯一的session ID作為cookie來代表每個(gè)客戶端物咳,用來識(shí)別這個(gè)客戶端接下來的請求。
這可能不是一種有效的方式蹄皱,因?yàn)楹芏鄷r(shí)候?yàn)g覽器并不一定支持cookie览闰,所以我們不建議使用這種方法來維持會(huì)話。
這個(gè)條目意味著巷折,當(dāng)表單被提交時(shí)压鉴,指定的名稱和值將會(huì)自動(dòng)包含在GET或POST數(shù)據(jù)中。每當(dāng)瀏覽器發(fā)送一個(gè)請求锻拘,session_id的值就可以用來保存不同瀏覽器的軌跡油吭。
這種方式可能是一種有效的方式,但點(diǎn)擊<A HREF>標(biāo)簽中的超鏈接時(shí)不會(huì)產(chǎn)生表單提交事件,因此隱藏表單域也不支持通用會(huì)話跟蹤上鞠。
session對(duì)象
除了以上幾種方法外际邻,JSP利用servlet提供的HttpSession接口來識(shí)別一個(gè)用戶,存儲(chǔ)這個(gè)用戶的所有訪問信息芍阎。
默認(rèn)情況下世曾,JSP允許會(huì)話跟蹤,一個(gè)新的HttpSession對(duì)象將會(huì)自動(dòng)地為新的客戶端實(shí)例化谴咸。禁止會(huì)話跟蹤需要顯式地關(guān)掉它轮听,通過將page指令中session屬性值設(shè)為false來實(shí)現(xiàn)
public Object getAttribute(String name)
返回session對(duì)象中與指定名稱綁定的對(duì)象,如果不存在則返回null
public Enumeration getAttributeNames()
返回session對(duì)象中所有的對(duì)象名稱
public long getCreationTime()
返回session對(duì)象被創(chuàng)建的時(shí)間岭佳, 以毫秒為單位血巍,從1970年1月1號(hào)凌晨開始算起
public String getId()
返回session對(duì)象的ID
public long getLastAccessedTime()
返回客戶端最后訪問的時(shí)間,以毫秒為單位珊随,從1970年1月1號(hào)凌晨開始算起
public int getMaxInactiveInterval()
返回最大時(shí)間間隔述寡,以秒為單位,servlet 容器將會(huì)在這段時(shí)間內(nèi)保持會(huì)話打開
public void invalidate()
將session無效化叶洞,解綁任何與該session綁定的對(duì)象
public boolean isNew()
返回是否為一個(gè)新的客戶端鲫凶,或者客戶端是否拒絕加入session
public void removeAttribute(String name)
移除session中指定名稱的對(duì)象
public void setAttribute(String name, Object value)?
使用指定的名稱和值來產(chǎn)生一個(gè)對(duì)象并綁定到session中
public void setMaxInactiveInterval(int interval)
用來指定時(shí)間,以秒為單位衩辟,servlet容器將會(huì)在這段時(shí)間內(nèi)保持會(huì)話有效