检查servlet中的会话是否有效

时间:2014-08-21 05:44:50

标签: java session servlets

/ **** ****注/ 在WEB.XML文件中我正在设置会话超时属性, 所以会议可能会过期。 / ************ /

我正在使用HttpSession对象来管理会话

HttpSesion session = myPersonalMethodThatReturnHttpSessionObject();

//我正在使用Eclipse,它在Debug视图中提供了以下详细信息,我将Image放在

下面

In this Image session has field isValid

//那我如何获得isValid字段或方法的值,所以在这里我可以放入条件

if(session != null)
{
    //removing attributes from session 
}

/ *************************************更多说明******* ************************************ /

我的问题是...... note1 - >会话超时为30分钟。

Step1  some one login my web apllication
Step2  session is created.
Step3  if user close web application without signout
Step4  all session attribute is there 
Step5  if another user try to login.
Step6  I try to remove all session attribute and store new attribute value.
Step7  Above functionality work properly but, while session is invalidate can't remove session     attribute so i need to put condition in if session is valid that remove attribute else do nothing so I need to check session is valod or not. 

5 个答案:

答案 0 :(得分:1)

根据您的更新,您的登录过程应如下所示:

HttpSession session = request.getSession(false);  // returns null if no session or session is invalid
if(session != null) {
    // you have old session
    session.invalidate();  // invalidate session - this will remove any old attrs hold in the session
}
// create new session
session = request.getSession(); // creates new empty session
....

您无法直接获取isValid字段。 request.getSession(false)正在使用它,如果当前会话无效,将返回null。如果会话已经无效,则您不必删除属性,因为它们已被删除且会话无法再访问。

答案 1 :(得分:0)

你应该创建一个实现javax.servlet.http.HttpSessionListener的具体类,并将你的代码添加到它的两个回调方法中:

public interface HttpSessionListener extends java.util.EventListener {
   void sessionCreated(javax.servlet.http.HttpSessionEvent httpSessionEvent);

   void sessionDestroyed(javax.servlet.http.HttpSessionEvent httpSessionEvent);
}

记得在web.xml中注册你的监听器!

答案 2 :(得分:0)

由于您看到isValid=false,我猜您的会话已变为无效/超时。

您应该致电HttpSession session = request.getSession(true);HttpSession session = request.getSession();以始终获得有效会话。

方法request.getSession(true)将确保在当前会话无效时创建新会话。如果当前会话有效,它将返回相同的内容。

默认情况下,request.getSession();方法会调用request.getSession(true);

答案 3 :(得分:-1)

您使用HttpServletRequest对象创建会话,如下所示。

HttpSession session = httpServletRequest.getSession();

如果尚未创建会话,则会为您提供新会话或返回现有会话对象。

答案 4 :(得分:-1)

你方法myPersonalMethodThatReturnHttpSessionObject()中的某处添加以下行

HttpSession session = request.getSession(false); 

这将帮助您找到有效的会话。