A. session過期時間是怎樣算的
設置session失效時間的三種方法
session-timeout(web.xml)元素與session.setMaxInactiveInterval()函數
A) web app server中,如websphere里可以設置超時時間為30分鍾
B)在web.xml中的session-config配置
session-timeout元素(WEB.XML文件中的元素)用來指定默認的會話超時時間間隔,以分鍾為單位。該元素值必須為整數。如果 session-timeout元素的值為零或負數,則表示會話將永遠不會超時。如:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
//30分鍾
setMaxInactiveInterval設置的是當前會話的失效時間,不是整個web的時間,單位為以秒計算。如果設置的值為零或負數,則表示會話將永遠不會超時。常用於設置當前會話時間。
C) 在程序中手動設置
java 代碼
session.setMaxInactiveInterval(30 * 60);
B. java web.xml設置session過期時間為15分鍾,超時卻不會過期
你可以試試這么做
web.xml
<listener>
<listener-class>
com.listener.SessionListener
</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
java
public class SessionListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
SummerConstant.UserMap.put(id, Boolean.TRUE); //添加用戶
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
synchronized (this) {
SummerConstant.USERNUM--; //用戶數減一
SummerConstant.UserMap.remove(id); //從用戶組中移除掉,用戶組為一個map
}
}
}
C. session 失效 時間
WebWebsphereXML配置管理Servlet
session-timeout(web.xml)元素與session.setMaxInactiveInterval()函數
a) web app server中,如websphere里可以設置超時時間為30分鍾
b)在web.xml中的session-config配置
session-timeout元素(WEB.XML文件中的元素)用來指定默認的會話超時時間間隔,以分鍾為單位。該元素值必須為整數。如果 session-timeout元素的值為零或負數,則表示會話將永遠不會超時。如:
1. <session-config>
2. <session-timeout>30</session-timeout>
3. </session-config>
4. //30分鍾
setMaxInactiveInterval設置的是當前會話的失效時間,不是整個web的時間,單位為以秒計算。如果設置的值為零或負數,則表示會話將永遠不會超時。常用於設置當前會話時間。
c) 在程序中手動設置
java 代碼
1. session.setMaxInactiveInterval(30 * 60);
想問兩個問題:
一、它們的優先順序?我想C應該最優先,但a和b 呢
二、如果一個應用的多個地方設置了不同的interval,會對session有影響嗎?
如後台管理用戶登錄設置超時時間為30分鍾,前台用戶登錄設置超時時間為15分鍾。
此時的setMaxInactiveInterval是隻影響servlet容器session的實例?還是影響整個容器(如果是這個,就有問題了)
不對,是可以設置的,三種方式設置:
1. 在server.xml中定義context時採用如下定義:
<Context path="/livsorder" docBase="/home/httpd/html/livsorder"
defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
isWorkDirPersistent="false"/>
2. 在web.xml中通過參數指定:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
其中30表示30分鍾
3. 在程序中通過servlet api直接修改
HttpSession ses = request.getSession();
ses.setMaxInactiveInterval(10);
設置單位為秒,設置為-1永不過期。
因為可能要用到cookie,所以學了一下,但又發現不用了,為了以後不忘,寫下此篇筆記。
一、cookie簡介 瀏覽器與WEB伺服器之間是使用HTTP協議進行通信的;而HTTP協議是無狀態協議。也就是說,當某個用戶發出頁面請求時,WEB伺服器只是簡單的進行響應,然後就關閉與該用戶的連接。因此當一個請求發送到WEB伺服器時,無論其是否是第一次來訪,伺服器都會把它當作第一次來對待,這樣的不好之處可想而知。為了彌補這個缺陷,Netscape開發出了cookie這個有效的工具來保存某個用戶的識別信息, 它是一種WEB伺服器通過瀏覽器在訪問者的硬碟上存儲信息的手段。 它是伺服器發送給瀏覽器的體積很小的純文本信息。 定義:cookie是Web瀏覽器存儲的少量命名數據,它與某個特定的網頁和網站關聯在一起。 cookie實際上和某一網站和網頁關聯的,保存用戶一定信息的文本文件。
二、cookie的屬性 除名字與值外,每個cookie有四個可選屬性: 1.expires:指定cookie的生存期。默認情況下cookie是暫時的,瀏覽器關閉就失效。 2.path:它指定了與cookie關聯在一起的網頁。默認是在和當前網頁同一目錄的網頁中有效。 如果把path設置為"/",那麼它對該網站的所有網頁都可見了。 3.domain:設定cookie有效的域名, 如果把path設置為"/",把domain設為".sohu.com",那麼 A.sohu.com和B.sohu.com 的所有網頁都能夠訪問此cookie。 4.secure:布爾值,它指定了網路上如何傳輸cookie。默認情況下,cookie是不安全的, 可以通過一個不安全的,普通的HTTP協議傳輸;若設置cookie為安全的,那麼它將 只在瀏覽器和伺服器通過HTTPS或其它的安全協議連接在一起時才被傳輸。
三、cookie的操作 cookie可以用javascipt來操作,也可以用JSP來操作。 下面給大家我寫的幾個例子,相信大家一看就明白了: 1.javascript 操作:
<script language="javascript">
//設置cookie,cookie有效期時間未GMT時間(距1970年1月1日臨時的毫秒)
//例如可以設置setCookie("password","12345",(3600000*24*180)),180有效
function setCookie (name, value, expires) {
var expdate = new Date();
expdate.setTime(expdate.getTime() + expires);
document.cookie = name + "=" + escape(value) +
"; expires=" + expires.toGMTString() + "; path=/";
}
//根據cookie名,取得cookie值
function getCookie(name) {
var search;
search = name + "="
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length ;
end = document.cookie.indexOf(";", offset) ;
if (end == -1)
end = document.cookie.length;
return unescape(document.cookie.substring(offset, end));
}
else
return "";
}
//刪除某一cookie
function deleteCookie(name) {
var expdate = new Date();
expdate.setTime(expdate.getTime() - (3600 *24* 1000 * 1));
setCookie(name, "", expdate);
}
//檢查是否存在此cookie
function checkCookie(cookieName,cookieValue){
if (getCookie(cookieName)==cookieValue){
return true;
}else{
return false;
}
}
</script>
2.jsp 操作: java中有個Cookie類:javax.servlet.http.Cookie
//讀取cookie的通用類,以Cookie[] 做參數傳個構造函數;
package com.test;
import javax.servlet.http.*;
/**
* @author sheng_li
*
*/
public class ComCookie {
private Cookie[] cookies;
private Cookie cookie;
public ComCookie(Cookie[] cs){
cookies = cs;
}
/**
* 通過cookieName,取得cookieValue,如果沒有此cookie則返回默認值
* @param cookieName
* @param defaultValue
* @return
*/
public String getCookieValue(String cookieName,String defaultValue) {
for(int i=0; i< cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName()))
return(cookie.getValue());
}
return(defaultValue);
}
/**
* 類方法,通過cookieName,取得cookieValue
* @param cookies
* @param cookieName
* @param defaultValue
* @return
*/
public static String getCookieValue(Cookie[] cookies,
String cookieName,
String defaultValue) {
for(int i=0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName()))
return(cookie.getValue());
}
return(defaultValue);
}
}
JSP中:(以下內容來源於網路)
JSP是使用如下的語法格式來創建cookie的: Cookie cookie_name =new Cookie("Parameter","Value"); 例如:Cookie newCookie =new Cookie("username","waynezheng"); response.addCookie(newCookie); 解釋:JSP是調用Cookie對象相應的構造函數Cookie(name,value)用合適的名字和值來創建Cookie,然後 Cookie可以通過HttpServletResponse的addCookie方法加入到Set-Cookie應答頭,本例中Cookie對象有兩個字元串參數:username,waynezheng。注意,名字和值都不能包含空白字元以及下列字元: @ : ;? , " / [ ] ( ) =
處理Cookie的屬性 看到這里,有的朋友又要問了:我光知道如何創建Cookie有什麼用呀?是呀,光知道如何創建Cookie而不知道怎麼使用是不夠的。在JSP中,程序是通過cookie.setXXX設置各種屬性,用cookie.getXXX讀出cookie的屬性,現把Cookie的主要屬性,及其方法列於下,供大家參考: 讀取客戶端的Cookie
類型 方法名 方法解釋
String getComment() 返回cookie中注釋,如果沒有注釋的話將返回空值.
String getDomain() 返回cookie中Cookie適用的域名. 使用getDomain() 方法可以指示瀏覽器把Cookie返回給同 一域內的其他伺服器,而通常Cookie只返回給與發送它的伺服器名字完全相同的伺服器。注意域名必須以點開始(例如.yesky.com)
int getMaxAge() 返回Cookie過期之前的最大時間,以秒計算。
String getName() 返回Cookie的名字。名字和值是我們始終關心的兩個部分,筆者會在後面詳細介紹 getName/setName。
String getPath() 返回Cookie適用的路徑。如果不指定路徑,Cookie將返回給當前頁面所在目錄及其子目錄下 的所有頁面。
boolean getSecure() 如果瀏覽器通過安全協議發送cookies將返回true值,如果瀏覽器使用標准協議則返回false值。
String getValue() 返回Cookie的值。筆者也將在後面詳細介紹getValue/setValue。
int getVersion() 返回Cookie所遵從的協議版本。
void setComment(String purpose) 設置cookie中注釋。
void setDomain(String pattern) 設置cookie中Cookie適用的域名
void setMaxAge(int expiry) 以秒計算,設置Cookie過期時間。
void setPath(String uri) 指定Cookie適用的路徑。
void setSecure(boolean flag) 指出瀏覽器使用的安全協議,例如HTTPS或SSL。
void setValue(String newValue) cookie創建後設置一個新的值。
void setVersion(int v) 設置Cookie所遵從的協議版本。
在Cookie發送到客戶端前,先要創建一個Cookie,然後用addCookie方法發送一個HTTP Header。 JSP將調用request.getCookies()從客戶端讀入Cookie,getCookies()方法返回一個HTTP請求頭中 的內容對應的Cookie對象數組。你只需要用循環訪問該數組的各個元素,調用getName方法檢查各 個Cookie的名字,至找到目標Cookie,然後對該Cookie調用getValue方法取得與指定名字關聯的值 。
例如
<%
String userName=request.getParameter("username");//從提交的HTML表單中獲取,用戶名
Cookie theUsername=new Cookie("username",userName);//以"username",userName值/對創建一個Cookie
response.addCookie(theUsername);
%>
..............
<%
Cookie myCookie[]=request.getCookies();//創建一個Cookie對象數組
for(int n=0;n=cookie.length-1;i++);//設立一個循環,來訪問Cookie對象數組的每一個元素
Cookie newCookie= myCookie[n];
if(newCookie.getName().equals("username")); //判斷元素的值是否為username中的值
{%>
你好,<%=newCookie.getValue()%>!//如果找到後,向他問好
<%}
%>
設置Cookie的存在時間,及刪除Cookie 在JSP中,使用setMaxAge(int expiry)方法來設置Cookie的存在時間,
參數expiry應是一個整數。正值表示cookie將在這么多秒以後失效。 注意這個值是cookie將要存在的最大時間,
而不是cookie現在的存在時間。 負值表示當瀏覽器關閉時,Cookie將會被刪除。零值則是要刪除該Cookie。 如:
<%
Cookie deleteNewCookie=new Cookie("newcookie",null);
deleteNewCookie.setMaxAge(0);
deleteNewCookie.setPath("/");
response.addCookie(deleteNewCookie);
%>
tomcat設置session失效時間
分類: Java 2011-11-09 18:50 107人閱讀 評論(0) 收藏 舉報
tomcat在5.5以後,就沒有自帶admin項目了,如果要從http://localhost:8080界面進入tomcat管理頁面,需要從網上下載對應的tomcat-admin.zip,舉個例子,如果你的tomcat是5.5.30的,需要從http://tomcat.apache.org/download-55.cgi下載(在下載頁面的Binary Distributions欄下的第四大項,Administration Web Application 即是)。解壓以後,得到的文件夾里,東西都已經給你整理好了。
你只需要按照解壓文件的目錄,這些文件到$CATALINA_BASE對應的目錄下,項目映射文件admin.xml中的路徑稍微改下,然後重啟tomcat就行了。
在tomcat的conf目錄下的tomcat-user.xml文件中還需要加
<role rolename="standard"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="standard,manager,admin"/>
來添加一個admin用戶,這樣就可以訪問tomcat的admin頁面了。
同樣,我們可以訪問tomcat的manager頁面來查看session的信息,在tomcat6.0以上的版本是自帶了manager這個項目的,如果是tomcat5.5.x的版本也需要去網上下載的,配置同admin。
這里說說session過期時間的設置,一般來說方法有四種:
1. 在tomcat——>conf——>servler.xml文件中定義:
<Context path="/test" docBase="/test"
defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
isWorkDirPersistent="false"/> //單位是秒
2. 在web.xml中定義:這個針對具體項目
<session-config>
<session-timeout>20</session-timeout>//單位是分鍾,0表示session不會失效
</session-config>
3. 在程序中定義:這個就針對具體頁面了
session.setMaxInactiveInterval(30*60);//單位是秒
4.在conf/context.xml文件設置:這個是針對所有的項目了
打開context.xml,在<Context>節點下添加如下<Manager>節點:
<Manager className="org.apache.catalina.session.PersistentM anager" >
debug=0
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1"
<Store className="org.apache.catalina.session.FileStore" directory="../session" />
//這里代表的是文件持久化.也可以自己實現Store
</Manager>
saveOnRestart:(true/false)配置服務重啟工程中對session的處理,若為true,則關閉前把有效的session保存,啟動後重新載入 maxActiveSession:活動狀態Session的最大數,為-1時則不限制,否則Session Manager將會把超出的Session對象轉移到Session Store中。
minIdleSwap:Session不活動的最短時間,超過該時間,Session Manager 可能會把該Session對象轉移到Session Store中,單位為秒。
maxidleSwap:Session不活動的最長時間,超過該時間,Session Manager 將會把該Session對象轉移到Session Store中,該Session將不在內存中。
maxidleBackup: Session不活動的最長時間,超過該時間,Session Manager 將會把該Session對象備份到Session Store中,但該Session對象依然存在內存中。
<Store>指定實現持久化的類和Session存放的文件位置,如該例子中指定的類是:org.apache.catalina.session.FileStore,而Session對象存放的目錄則是tomcat根目錄下的 session文件夾(當然自己創建)
在第四種配置中,配置完後可以寫一個簡單的jsp頁面,在頁面上顯示本次用戶訪問的Session ID,然後重起tomcat,再刷新該頁面,可以看到該Session Id不變,而在/session目錄下自動生成一個以session id為名,以「session」為擴展名的文件。該Session的持久化配置成功。
D. 如何設置session過期時間
常用的有兩種方法:
1. 在主頁面中寫入下面兩句:
HttpSession session=request.getSession(true);
session.setMaxInactiveInterval(3600);//3600秒,注意伺服器端的3600秒,而不是客戶端的
2. 在項目的web.xml中設置:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
這里的60就是60分鍾。
還有一種在伺服器端設置的方法,因為不同的伺服器配置不同,在這就不說了,以上兩個就足夠用了。
E. 在web.xml下設置session超時不起作用,為什麼
你好,這是servlet3.0里的新規范,我簡單的說一下:
servlet
3.0規范實施前tomcat的會話跟蹤用兩種方法:cookie和帶jsessionid參數的重寫url。
在
tomcat
7中的url重寫方法不再是強制性的,並加入一個新的會話跟蹤方法基於ssl會話。就這些。
F. 關於structs2 web.xml文件的session-config配置後失效時間的問題
30分鍾後session會失效嗎?
不會失效
還是說如果30分鍾該用戶一直沒有操作,session才會失效,原理是什麼?
session的一個屬性 記錄了用戶的最後一次訪問session的時間lastAccessedTime
如下是servlet規范原文
In the HTTP protocol, there is no explicit termination signal when a client is no longer active. This means that the only mechanism that can be used to indicate when a client is no longer active is a time out period.
The default time out period for sessions is defined by the servlet container and can be obtained via the getMaxInactiveInterval method of the HttpSession interface. This time out can be changed by the Developer using the setMaxInactiveInterval method of the HttpSession interface. The time out periods used by these methods are defined in seconds. By definition, if the time out period for a session is set to -1, the session will never expire. The session invalidation will not take effect until all servlets using that session have exited the service method. Once the session invalidation is initiated, a new request must not be able to see that session.
The getLastAccessedTime method of the HttpSession interface allows a servlet to determine the last time the session was accessed before the current request. The session is considered to be accessed when a request that is part of the session is first handled by the servlet container.
G. 如何配置伺服器session過期時間
在一般系統登錄後,都會設置一個當前session失效的時間,以確保在用戶沒有使用系統一定時間後,自動退出登錄,銷毀session。具體設置很簡單:在主頁面或者公共頁面中加入:session.setMaxInactiveInterval(900);參數900單位是秒,即在沒有活動15分鍾後,session將失效。這里要注意這個session設置的時間是根據伺服器來計算的,而不是客戶端。所以如果是在調試程序,應該是修改伺服器端時間來測試,而不是客戶端。在一般系統中,也可能需要在session失效後做一些操作,(1)控制用戶數,當session失效後,系統的用戶數減少一個等,控制用戶數在一定范圍內,確保系統的性能。(2)控制一個用戶多次登錄,當session有效時,如果相同用戶登錄,就提示已經登錄了,當session失效後,就可以不用提示,直接登錄了那麼如何在session失效後,進行一系列的操作呢?這里就需要用到監聽器了,即當session因為各種原因失效後,監聽器就可以監聽到,然後執行監聽器中定義好的程序,就可以了。監聽器類為:HttpSessionListener類,有sessionCreated和sessionDestroyed兩個方法自己可以繼承這個類,然後分別實現。sessionCreated指在session創建時執行的方法sessionDestroyed指在session失效時執行的方法給一個簡單的例子:{publicvoidsessionCreated(HttpSessionEventevent){HttpSessionses=event.getSession();Stringid=ses.getId()+ses.getCreationTime();SummerConstant.UserMap.put(id,Boolean.TRUE);//添加用戶}publicvoidsessionDestroyed(HttpSessionEventevent){HttpSessionses=event.getSession();Stringid=ses.getId()+ses.getCreationTime();synchronized(this){SummerConstant.USERNUM--;//用戶數減一SummerConstant.UserMap.remove(id);//從用戶組中移除掉,用戶組為一個map}}}然後只需要把這個監聽器在web.xml中聲明就可以了例如:com.summer.kernel.tools.SessionListener補充:具體設置很簡單,方法有三種:(1)在主頁面或者公共頁面中加入:java代碼1.HttpSessionses=request.getSession();2.ses.setMaxInactiveInterval(10);session.setMaxInactiveInterval(900);參數900單位是秒,即在沒有活動15分鍾後,session將失效。這里要注意這個session設置的時間是根據伺服器來計算的,而不是客戶端。所以如果是在調試程序,應該是修改伺服器端時間來測試,而不是客戶端。(2)也是比較通用的設置session失效時間的方法,就是在項目的web.xml中設置15這里的15也就是15分鍾失效.(3)直接在應用伺服器中設置,如果是tomcat,可以在tomcat目錄下conf/web.xml中找到元素,tomcat默認設置是30分鍾,只要修改這個值就可以了。在server.xml中定義context中如下定義:xml代碼需要注意的是如果上述三個地方如果都設置了,有個優先順序的問題,從高到低:(3)à(2)---à(1)--相關文章:•Session過期時間的四種設置方式•PHP中,設定Session過期時間•設置Session過期時間的問題•設置用於Session的Cookie的過期•ASP中Session技巧默認過期時間•判斷Session的過期時間-採用Java
H. java 網站中session 有默認的過期時間嗎
程序中session都有一個默認的過期時間,其中tomcat中的默認時間為30分鍾,根據需要我們可以去手動設置session的過期時間,以下是設置session的過期時間的三個方法:
1.在tomcat-->conf-->conf/web.xm中的<session-config>中設置:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2.在項目的web.xml中定義:
<session-config>
<session-timeout>20</session-timeout>
</session-config>
註:20則設置過期時間為20分鍾 測試通過
3.在程序中定義:
session.setMaxInactiveInterval(30*60);
設置單位為秒,設置為-1永不過期
I. 如何控制session過期時間
方法一:web app server中,如webspher...
1
方法二:在web.xml中的session-config...
2
方法三:setMaxInactiveInterval設置當...
3
方法四可以通過一個線程去掃描,如果時...