溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Session時(shí)間永久有效怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2022-09-28 15:41:10 來源:億速云 閱讀:179 作者:iii 欄目:編程語(yǔ)言

本文小編為大家詳細(xì)介紹“Session時(shí)間永久有效怎么實(shí)現(xiàn)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Session時(shí)間永久有效怎么實(shí)現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

原理:在B/S系統(tǒng)中,如果用戶在Session超時(shí)時(shí)間前與服務(wù)器進(jìn)行了交互,那么將不會(huì)超時(shí)。所以我們只要模擬用戶在Session超時(shí)前和服務(wù)器進(jìn)行交互就可以實(shí)現(xiàn)Session的永久有效。

1. 將如下JavaScript代碼放置在系統(tǒng)使用中一直顯示的頁(yè)面中,如在框架頁(yè)面中,你可以將如下代碼放置在Banner框架、Bottom框架、左側(cè)一直顯示的菜單框架,或者是一個(gè)隱藏框架中。如果是非框架頁(yè)面,那么可以放置在不會(huì)被用戶關(guān)閉的頁(yè)面中,如主菜單頁(yè)面。這樣的目的是保證頁(yè)面始終存在,從而其中的JavaScript代碼可以是中在執(zhí)行。

<!-- 用于從服務(wù)器上請(qǐng)求.aspx文件的JavaScript腳本塊; -->
 < script language = " javascript "  id = " KeepSessionAliveScriptBlock " >
 </ script >
 < script language = " javascript " >
    // 用于循環(huán)調(diào)用服務(wù)器.aspx文件的JavaScript函數(shù);
     keepSessionAlive(); </ script >

2. 在.js文件中添加keepSessionAlive()函數(shù),函數(shù)體如下:

 /**
   *summary: 通過定時(shí)請(qǐng)求服務(wù)器的某個(gè)頁(yè)面(.aspx)文件來保證Session不會(huì)超時(shí)。
 *created: liguozhu(李國(guó)珠)
   *modifty,content: [修改者,修改內(nèi)容說明]
   *
   *created time: 2007-11-22
   */
    function  keepSessionAlive()    {        document.all["KeepSessionAliveScriptBlock"].src = "/BJAssess/YearAssessSubSystem/Resource/WebForm3.aspx?RandStr="+Math.random();        //這里的RandStr=Math.random只是為了讓每次back.src的值不同,防止同一地址刷新無效的情況
        window.setTimeout("keepSessionAlive()",30000); 
   }

這里document.all["KeepSessionAliveScriptBlock"] 這里引用了頁(yè)面上<script language="javascript" id="KeepSessionAliveScriptBlock"></script>的程序塊對(duì)象,其中的src屬性指向的是需要打開的文件。一般src 應(yīng)該指向的是.js文件,這個(gè)效果就是將js文件中的內(nèi)容加入到程序塊中,然后再進(jìn)行執(zhí)行。如:src = "testJS.js", 而testJS.js文件中如果有一句window.alert("Life Is Good!");,那么執(zhí)行了代碼后頁(yè)面會(huì)彈出"Life Is Good"的信息提示框。其實(shí)javascript程序塊的src屬性并不會(huì)在意引用的是否是.js文件,它僅僅是打開指定的文件,然后將文件內(nèi)容按照J(rèn)avaScript的方式進(jìn)行執(zhí)行,當(dāng)然如果你打開文件的內(nèi)容中不是合法的JavaScript內(nèi)容,那么將不執(zhí)行內(nèi)容。

這里設(shè)置src的頁(yè)面路徑需要注意的是為了防止各個(gè)調(diào)用頁(yè)面的路徑不同,這里建議采用自上而下的路徑方式,如例子中的路徑就是BJAssess項(xiàng)目,然后一級(jí)級(jí)的找到需要調(diào)用的.aspx頁(yè)面文件。為了放置IE讀取緩存的情況,這里在讀取.aspx頁(yè)面文件的URL中增加一個(gè)隨機(jī)數(shù)。

window.setTimeout用于定時(shí)(例子中設(shè)置的是3000毫秒,即半分鐘)重復(fù)執(zhí)行keepSessionAlive()一次,這里的時(shí)間可以自行設(shè)置為小于Session超時(shí)的任何時(shí)間。這個(gè)每隔半分鐘的請(qǐng)求WebForm3.aspx頁(yè)面的操作就是實(shí)現(xiàn)了前面“原理”中描述模擬用戶操作和服務(wù)器進(jìn)行交互,從而保證Session不超時(shí)的功能。

3. 在對(duì)應(yīng)的路徑下建立一個(gè)用于請(qǐng)求的.aspx頁(yè)面文件,例子中是WebForm3.aspx。這里需要在HTML源碼模式將所有HTML代碼刪除,因?yàn)槿绻粍h除這些代碼,ASP.NET在解析.aspx文件后會(huì)產(chǎn)生一個(gè)完整的HTML頁(yè)面代碼,這樣如果再嵌到前面的<script language="javascript"></script>腳本塊中就會(huì)由于<html>, <head>, <body>

等標(biāo)簽出現(xiàn)重復(fù)而保錯(cuò),在IE中顯示的錯(cuò)誤是“語(yǔ)法錯(cuò)誤”。寫到這里,可能會(huì)有人說既然不能產(chǎn)生完整的HTML頁(yè)面代碼,那么為什么不直接使用.ascx(用戶自定義Web控件)呢?直接請(qǐng)求.ascx是不行的,我目前想到的原因是“你在瀏覽器中是無法直接請(qǐng)求一個(gè).ascx文件的”,如果你在瀏覽器中直接請(qǐng)求.ascx那么瀏覽器會(huì)返回?zé)o法訪問的錯(cuò)誤。所以你在javascript.src = "xxx.ascx"文件的時(shí)候,實(shí)際上是請(qǐng)求不成功的。

到此為止實(shí)現(xiàn)永久Session的步驟就完成了。這里還需要特別說明一下,在網(wǎng)絡(luò)上看到有些帖子說需要在請(qǐng)求的頁(yè)面,如:.aspx頁(yè)面中調(diào)用代碼Session("xxx") = "xxx"。其中Session("xxx")是隨便的一個(gè)Session值,目的是為了調(diào)用Session來保證Session不過期,實(shí)際上這個(gè)操作是沒有必要的,原因是(在.NET Framework 1.1的環(huán)境下)在請(qǐng)求系統(tǒng)頁(yè)面的時(shí)候,如最常見的是請(qǐng)求Login.aspx界面,這個(gè)時(shí)候針對(duì)此次回話的SessionID和Session就已經(jīng)生成了,其他所有的Session("xxx")操作都是對(duì)于這個(gè)Session列表中具體Item的操作。所以只要你與服務(wù)器進(jìn)行了交互,那么服務(wù)器就會(huì)驗(yàn)證你的SessionID,對(duì)應(yīng)的Session是否過期,如果沒有,那么就延后過期時(shí)間。

讀到這里,這篇“Session時(shí)間永久有效怎么實(shí)現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI