欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
jsp/servlet:servlet/jsp會(huì )話(huà)跟蹤機制
 httpsession接口提供了存儲和返回標準會(huì )話(huà)屬性的方法。標準會(huì )話(huà)屬性如會(huì )話(huà)標識符、應用數據等,都以“名字-值”對的形式保存。簡(jiǎn)而言之,httpsession接口提供了一種把對象保存到內存、在同一用戶(hù)的后繼請求中提取這些對象的標準辦法。在會(huì )話(huà)中保存數據的方法是setattribute(string s, object o),從會(huì )話(huà)提取原來(lái)所保存對象的方法是getattribute(string s)。

    為此,servlet采用“超時(shí)限制”的辦法來(lái)判斷用戶(hù)是否還在訪(fǎng)問(wèn):如果某個(gè)用戶(hù)在一定的時(shí)間之內沒(méi)有發(fā)出后繼請求,則該用戶(hù)的會(huì )話(huà)被作廢,他的httpsession對象被釋放。會(huì )話(huà)的默認超時(shí)間隔由servlet容器定義。這個(gè)值可以通過(guò)getmaxinactiveinterval方法獲得,通過(guò)setmaxinactiveinterval方法修改,這些方法中的超時(shí)時(shí)間以秒計。如果會(huì )話(huà)的超時(shí)時(shí)間值設置成-1,則會(huì )話(huà)永不超時(shí)。servlet可以通過(guò)getlastaccessedtime方法獲得當前請求之前的最后一次訪(fǎng)問(wèn)時(shí)間。

    會(huì )話(huà)跟蹤依賴(lài)于cookie。由于各種原因,特別是安全上的原因,一些用戶(hù)關(guān)閉了cookie。

    要深入理解會(huì )話(huà)跟蹤機制,首先我們必須理解在servlet/jsp容器中會(huì )話(huà)如何運作。

    每當新用戶(hù)請求一個(gè)使用了httpsession對象的jsp頁(yè)面,jsp容器除了發(fā)回應答頁(yè)面之外,它還要向瀏覽器發(fā)送一個(gè)特殊的數字。這個(gè)特殊的數字稱(chēng)為“會(huì )話(huà)標識符”,它是一個(gè)唯一的用戶(hù)標識符。此后,httpsession對象就駐留在內存之中,等待同一用戶(hù)返回時(shí)再次調用它的方法。

    會(huì )話(huà)標識符以cookie的形式在服務(wù)器和瀏覽器之間傳送。如果瀏覽器不支持cookie又如何呢?此時(shí),對服務(wù)器的后繼請求將不會(huì )帶有會(huì )話(huà)標識符。結果,jsp容器認為該請求來(lái)自一個(gè)新用戶(hù),它會(huì )再創(chuàng )建一個(gè)httpsession對象,而以前創(chuàng )建的httpsession對象仍舊駐留在內存中,但該用戶(hù)以前的會(huì )話(huà)信息卻丟失了。

    對象和數據不是保存在內存中,而是以文本文件形式保存。每一個(gè)文本文件與一個(gè)特定的用戶(hù)關(guān)聯(lián),文件的名字就是會(huì )話(huà)的標識符。因此,文件名字必須是唯一的。

    它應該與應用無(wú)關(guān),其他想要實(shí)現同樣功能的開(kāi)發(fā)者應該能夠方便地重用它。

    為了作廢過(guò)期的會(huì )話(huà),應該設定一個(gè)超時(shí)值。同一個(gè)用戶(hù),如果他超過(guò)一定的時(shí)間之后再次返回,他將獲得一個(gè)新的會(huì )話(huà)標識符。此舉能夠防止未經(jīng)授權的用戶(hù)冒用其他人的會(huì )話(huà)。

    同時(shí),應該存在一種更新會(huì )話(huà)文本文件最后改動(dòng)時(shí)間的機制,使得用戶(hù)在會(huì )話(huà)過(guò)期時(shí)限之前返回時(shí)會(huì )話(huà)總是保持最新且合法的狀態(tài)數據。

    下面所介紹的工程稱(chēng)為pseudosession,它是偽會(huì )話(huà)機制一個(gè)很簡(jiǎn)單的實(shí)現??紤]到移植性,我們以javabean的形式實(shí)現它。pseudosessionbean的完整代碼可以從本文后面下載。

    timeout是用戶(hù)的最后一個(gè)請求到會(huì )話(huà)過(guò)期作廢之間的時(shí)間。在pseudosessionbean的代碼清單中,timeout設置成了以毫秒表示的20分鐘,這是一個(gè)比較合理的超時(shí)時(shí)間值。對于任何用戶(hù),如果他在這個(gè)超時(shí)時(shí)間之后才繼續發(fā)出請求,他將得到一個(gè)新的會(huì )話(huà)標識符。

    如果用戶(hù)是第一次訪(fǎng)問(wèn),則為該用戶(hù)設定一個(gè)新的會(huì )話(huà)標識符。

    把合法會(huì )話(huà)標識符所對應文本文件的最后修改日期改為now。

    綜上所述,getsessionid并不總是返回新的合法會(huì )話(huà)標識符:它返回的標識符可能與傳遞給它的標識符相同,也可能是新創(chuàng )建的會(huì )話(huà)標識符。

    setvalue方法按如下規則保存名字-值對:
 
    如果與value值關(guān)聯(lián)的name以前還沒(méi)有保存過(guò),則新的名字-值對加入到文本文件的末尾。

    setvalue方法按照如下格式保存名字-值對,注意“名字”是大小寫(xiě)敏感的:

    4.4 deleteallinvalidsessions方法
    deleteallinvalidsessions方法刪除那些與已經(jīng)過(guò)期的會(huì )話(huà)關(guān)聯(lián)的文本文件。由于調用getsessionid方法時(shí)過(guò)期的會(huì )話(huà)文本文件會(huì )被刪除,deleteallinvalidsessions方法并不是關(guān)鍵的方法。什么時(shí)候調用這個(gè)方法由應用自己決定。例如,我們可以編寫(xiě)一個(gè)專(zhuān)用的后臺程序,由這個(gè)程序每天一次清除所有過(guò)期的文本文件。最簡(jiǎn)單的辦法是在jsp文件末尾調用deleteallinvalidsessions方法,但如果網(wǎng)站比較繁忙,重復地調用deleteallinvalidsessions方法將降低整個(gè)網(wǎng)站的響應能力。一種明智的做法是:編寫(xiě)一個(gè)在訪(fǎng)問(wèn)量較少的時(shí)候自動(dòng)進(jìn)行清理的后臺程序。

    public void deleteallinvalidsessions()
    它首先把所有會(huì )話(huà)文本文件的名字讀入files字符串數組:
    file dir = new file(path); string[] files = dir.list();
    deleteallinvalidsessions方法比較文本文件的最后修改時(shí)間(加上超時(shí)時(shí)間)和系統當前時(shí)間,確定會(huì )話(huà)是否過(guò)期。long類(lèi)型的變量now用于保存系統的當前時(shí)間。
    long now = system.currenttimemillis();
    接下來(lái),deleteallinvalidsessions方法通過(guò)循環(huán)訪(fǎng)問(wèn)files數組,依次檢查每個(gè)文件的lastmodified屬性。所有與過(guò)期會(huì )話(huà)關(guān)聯(lián)的文件都將被刪除:
    for (int i=0; i< files.length; i++) { file f = new file(path + files[i]); if (f.lastmodified() + timeout > now) f.delete(); // 刪除過(guò)期的會(huì )話(huà)文本文件}

    編譯好pseudosessionbean這個(gè)javabean之后,我們就可以利用偽會(huì )話(huà)管理機制來(lái)管理web應用的會(huì )話(huà)狀態(tài)信息了。由于不必再使用服務(wù)器的會(huì )話(huà)管理機制,我們可以在page指令中把session屬性設置為false關(guān)閉默認的jsp/servlet會(huì )話(huà)管理功能。
< %@ page session="false" %>

    在上面這個(gè)< jsp:usebean>標記中,class屬性值是“包.類(lèi)名字”形式。當然,對于不同的包名字,class屬性的值應該作相應的修改。注意bean的scope屬性是“application”,這是因為我們要在應用的所有頁(yè)面中使用這個(gè)bean。在這個(gè)應用中,把bean的scope屬性設置為“application”具有最好的效率,因為我們只需創(chuàng )建bean對象一次就可以了。另外,正如前面所提到的,getsessionid方法必須在所有其他代碼之前調用。
http://www.4ucode.com/Study/Topic/1877305
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
解析Servlet/JSP會(huì )話(huà)跟蹤機制
【 servlet的session管理】
JSP技巧匯編
Session那些事(一)
提升JSP應用程序的七大絕招
Struts2攔截器使用方法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久