如何在jsp中使会话无效

时间:2013-08-18 09:20:56

标签: jsp

我正在使用MVC框架创建一个项目,其中我在多个页面上创建了会话,并且在每个页面上都有一个锚标记显示(注销),用户将用户重定向到第一页(登录页面)。我想要做的是当用户被重定向到登录页面时,如果是,则检查是否已经存在会话,然后它会使会话无效,并且用户必须再次登录。但是当我点击提交而没有填写用户名/密码时,我的代码在会话无效后仍无效,它仍然需要旧值...请告诉我哪里出错了?

         <jsp:useBean id="theBean" class="pack.java.MyModel"/>
        <jsp:setProperty name="theBean" property="name" param="userName"/>
         <jsp:setProperty name="theBean" property="pass" param="userPass"/>
         <%@ taglib uri="/WEB-INF/jsp2/taglib1.tld" prefix="easy" %>
         <html>
        <head>

        </head>
        <body >
        <form  method="post">
        <h1>Login please</h1>
        Enter username : <input type = text  name = userName  >
          </br>
        Enter password : <input type = password  name = userPass  >
       </br>
        <input type = submit name = submit value = submit>
        </br>
        <%

          HttpSession session=request.getSession(false);

        if(session!=null)
         {
          session.invalidate();
         }
          String btn = request.getParameter("submit");
         if(btn!=null)
      {
       %>

        <easy:myTag/>
       <% 

       }
       %>
    </form>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

取决于框架

代码

<%
session.invalidate();
%>

使会话无效,但“easy:myTag”的作用是什么?

在单独的页面中将会话无效;如果它有效,你必须调查自定义标签myTag。

答案 1 :(得分:0)

您的疑问是您在响应标头后调用invalidate方式。一旦jsp被转换为servlet,html代码就在那些命令行之前。 尝试将其放在<hmtl>标记之前。

  

在幕后,系统从cookie或中提取用户ID   附加的URL数据,然后使用该ID作为表的键   以前创建过的HttpSession对象。但这一切都已完成   对程序员透明:你只需要调用getSession。如果不   会话ID在传入的cookie或附加的URL信息中找到,   系统会创建一个新的空会话。而且,如果是饼干   使用(默认情况),系统也创建一个传出   cookie名为JSESSIONID,具有表示会话的唯一值   ID。因此,虽然您在请求中调用getSession,但调用可以   影响响应。 因此,您可以致电   request.getSession仅在设置HTTP响应合法时才有效   标题:在发送任何文档内容之前(即,刷新或   承诺)给客户。

如本文件所述: http://www.java-programming.info/tutorial/pdf/csajsp2/08-Session-Tracking.pdf

从这个网站: http://courses.coreservlets.com/Course-Materials/csajsp2.html

有关更多一般信息:

  

丢弃会话数据

     

完成用户的会话数据后,您有三个选择。

     

•仅删除servlet创建的数据。你可以打电话   removeAttribute(&#34; key&#34;)丢弃与之关联的值   指定的密钥。这是最常见的方法。

     

•删除整个会话(在当前的Web应用程序中)。您可以   调用invalidate以丢弃整个会话。只记得那样做   所以导致所有用户的会话数据丢失,而不仅仅是   您的servlet或JSP页面创建的会话数据。所以,所有的   Web应用程序中的servlet和JSP页面必须就案例达成一致   可以调用无效的。

     

•将用户注销并删除属于他或她的所有会话。   最后,在支持servlet 2.4和JSP 2.0的服务器中,您可以   调用logout以将客户端记录到Web服务器之外并使所有客户端无效   与该用户关联的会话(每个Web应用程序最多一个)。   同样,由于此操作会影响您自己以外的servlet,因此请确保   协调使用logout命令与其他开发人员   你的网站。