重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
本文小編為大家詳細介紹“Session超時問題怎么解決”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Session超時問題怎么解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
成都創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站設計、成都網站設計、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的景泰網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
眾所周知,當用戶登錄網站后較長一段時間沒有與服務器進行交互,將會導致服務器上的用戶會話數據(即session)被銷毀。此時,當用戶再次操作網頁時,如果服務器進行了session校驗,那么瀏覽器將會提醒用戶session超時。
那么,如何解決用戶登錄后較長時間未操作而導致的session失效的問題呢?
導致這個問題的關鍵詞有兩個:一個是“長時間”,一個是“未操作”。
1.如果用戶未操作的“長時間”超過了服務器配置的session超時時間,并導致session失效,那么我們延長session的超時時間,讓用戶原來的“長時間”與超時時間相比,變得不“長”,不就可以解決了嗎?
2.如果用戶是長時間“未操作”導致session失效,那么我們想辦法產生“操作”,讓用戶每隔一小段時間就“操作”一次,與服務器產生交互,那么session自然也不會失效。
一般情況下下,我們首先想到的是,通過改變服務器的配置,延長服務器的session超時時間。
例如,在Tomcat服務器的web.xml文件中有如下節點內容:
30
這里的30表示session的超時時間,單位為分鐘,如果用戶登錄后在30分鐘內沒有與服務器交互,那么當前用戶的session將失效。我們可以配置一個更大的數值(比如60),就可以延長session的超時時間,如果將該值改為0或負數的話,則表示session永不失效。
不過在實際的工作應用中,一味地上調session的超時時間設置并不怎么常見,大多數需要實現該功能的網站都將解決問題的焦點集中在第二條思路上。例如:一些在線網站均采用定時刷新頁面的方法來防止session超時。
定時刷新頁面,最常見的有兩種實現方式:一種是通過JavaScript + HTML DOM,另一種則是通過meta標簽來實現。
function refresh(seconds){ setTimeout("self.location.reload()", seconds * 1000); } refresh(600); //調用方法啟動定時刷新,數值單位:秒。
在頁面中添加meta標簽refresh也可以指定每隔指定時間就刷新當前頁面,示例代碼如下:
上述meta標簽可以實現每過600秒就刷新一次當前頁面。
在上述兩種方案中,較好的為第二種,因為如果當前頁面是在IE瀏覽器的模式窗口中打開的,默認情況下,self.location.reload()
方法將會失效,而refresh meta標簽在IE模式窗口下仍然有效。
上述兩種方式都實現了刷新當前頁面,并且使用起來非常簡單,不過很遺憾的是,它們存在一種幾乎致命的缺陷。 試想一下,如果在論壇發帖等需要用戶輸入內容的頁面,用戶花費較長的時間輸入了許多文本內容,可是突然遇到了一個定時頁面刷新,結果用戶輸入的所有內容都沒了,估計這個時候用戶連掐死你的心都有了……
因此我們需要在當前頁面本身不刷新、不影響用戶的任何操作的情況下實現定時刷新。最常見的解決方法仍然有兩種。
一種是在當前頁面添加一個隱藏的iframe
,然后在該iframe
里面實現定時刷新。
此外,我們需要在服務器上編寫對應的請求響應代碼,例如ping.php
中可以編寫如下代碼: