WEB頁面定時刷新實現Session永不超時

          衆所周知,當用戶登錄網站後較長一段時間沒有與服務器進行交互,將會導致服務器上的用戶會話數據(即session)被銷燬。此時,當用戶再次操作網頁時,如果服務器進行了session校驗,那麼瀏覽器將會提醒用戶session超時,導致這個問題的關鍵詞有兩個:一個是「長時間」,一個是「未操作」。    

防止session超時,我們一般採用的方式有兩種:1、延遲session超時時間 2、(在規定的session超時時間內)隔一定時間與服務器交互。

  一、 延長服務器的session超時時間。ps:在Tomcat服務器的WEB.xml有如下節點內容: 

<session-config><session-timeout>30</session-timeout></session-config>

      這裏的30表示session的超時時間,單位爲分鐘,如果用戶登錄後在30分鐘內沒有與服務器交互,

    那麼當前用戶的session將失效。我們可以配置一個更大的數值(比如60),

    就可以延長session的超時時間,如果將該值改爲0或負數的話,則表示session永不失效。

 

  不過在實際的工作應用中,一味地上調session的超時時間設置並不怎麼常見,

  大多數需要實現該功能的網站都將解決問題的焦點集中在另一種思路上。

   例如:一些在線網站均採用定時刷新頁面的方法來防止session超時。

      二、定時刷新頁面。最常見的有兩種實現方式:一種是通過JavaScript+HTMLDOM,另一種則是通過meta標籤來實現。

   1)JavaScript+HTMLDOM,示例代碼如下:

function refresh(seconds)
{
    setTimeout("self.location.reload()",seconds*1000);
}
refresh(600);//調用方法啓動定時刷新,數值單位:秒。

    2)通過meta標籤來實現(在頁面中添加meta標籤refresh也可以指定每隔指定時間就刷新當前頁面),示例代碼如下: 

<metahttp-equiv="refresh"content="600"/>

    上述meta標籤可以實現每過600秒就刷新一次當前頁面。

    在上述兩種方案中,較好的爲第二種,因爲如果當前頁面是在IE瀏覽器的模式窗口中打開的,默認情況下,

    self.location.reload()方法將會失效,而refreshmeta標籤在IE模式窗口下仍然有效。

    上述兩種方式都實現了刷新當前頁面,並且使用起來非常簡單,不過很遺憾的是,它們存在一種幾乎致命的缺陷。試想一下,如果在論壇發帖等需要用戶輸入內容的頁面,用戶花費較長的時間輸    入了許多文本內容,可是突然遇到了一個定時頁面刷新,結果用戶輸入的所有內容都沒了,估計這個時候用戶連掐死你的心都有了……

 

因此我們需要在當前頁面本身不刷新、不影響用戶的任何操作的情況下實現定時刷新。最常見的解決方法仍然有兩種。

  1、在當前頁面添加一個隱藏的iframe,然後在該iframe裏面實現定時刷新。

  2、使用JavaScript Image對象來實現定時刷新,(服務器的響應可以是文字等非圖片內容,非圖片內容只會造成圖像加載失敗,而我們的圖像標籤本身就是隱藏的,不管是加載成功還是失敗都不    會顯示,畢竟我們的主要目的是發送請求給服務器,讓服務器保持session處於活動狀態。)

  3、使用Ajax來實現定時刷新。

 使用說明:

  使用iframe標籤實現定時刷新:
    優點是:不需要編寫JavaScript代碼,可以在瀏覽器禁用JavaScript的情況下實現定時刷新;
    缺點是:在某些不支持iframe標籤的老式瀏覽器中沒有效果,此外,iframe標籤在瀏覽器中新增加了一個獨立的頁面,即使沒有顯示出來,不過其內部解析的window、document等對象仍然        存在,佔用的瀏覽器內存相對較多。
 
  使用Image對象:
    優點是:與iframe相比,佔用的內存相對較少,支持Image的瀏覽器也相對較多(現代瀏覽器均支持);
    缺點是:在瀏覽器禁用JavaScript的情況下就毫無用武之地了(這個現在幾乎不存在,現在很少出現禁用js的情況)。
  
  Ajax來實現定時刷新:
    缺點是:因爲有些老式瀏覽器的JavaScript無法實現Ajax,但是卻可以使用Image對象。
        此外,使用Ajax需要編寫更多的代碼來處理XMLHttpRequest等對象的活動。

 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章