设定session过期时间。
addSessionListener(),session过期回自动调用此函数,
在其中进行logout.

解决方案 »

  1.   

    当用户关闭浏览器后,服务器端保留SESSION直到SESSION超时,但本地的SESSION就没有了。
    若用户再想开浏览器进入的话,SESSION里肯定没有登陆信息。
      

  2.   

    hehe.其实简单,当用户关掉浏览器的时候,javascript里面有个onUpload的事件被激发,你通过这个事件的处理器就可以调用相应的jsp/servlet,做你想做的事情了。。
      

  3.   

    wqxtt(wqxtt):我觉得你的做法是可以的,但麻烦给个详细实现方法可以吗?先谢了! 
      

  4.   

    to skyyoung(路人甲) :
        请问本地SESSION与服务端SESSION怎么交互,详细一点好吗?
    to wqxtt(wqxtt)  :
        请问是不是无论什么方法关掉浏览器(包括非法如断电),都要激发该事件?
      

  5.   

    to hawk_js(鹰): session 时间根据需要而定。但如果你想要关掉浏览器后
    立即退出,那这样恐怕不行。而要采用在javaScript中写unload的方法。
    但那样会很麻烦,因为每个文件中都要写unload方法。
    最终采用什麽方法,还是要看客户的要求如何。
      

  6.   

    to fat_tiger(胖老虎):
       客户的要求是:在关掉浏览器(直接点浏览器右上角的X符号,来关浏览器)后,此时用户
    必须重新经过登录(密码验证),才能看到他想看的页面,而如果他不登录,直接输入某个页
    面的路径的话,则不能进入,并提醒他要重新登录才能进入。
       请问,具体我应该怎么做?
      

  7.   

    你可以在你的jsq页面的头几行加入一段验证程序,判断在session中是否有一个特定的信息,如果没有提示出错,就可以了
      

  8.   

    我觉得beyondii的办法,可行,因为如果当前页关掉以后Session会消失的。
      

  9.   

    直接利用session就行了,服务器确实不能得知何时客户端结束了(例如:网络端了、客户关机、客户关闭浏览器、等等)。但是能保证下次(重开浏览器,注意与刷新不同,刷新仍在原来的session范围内)打开页面的时候一定是个新的session,换句话说:就是用户必须重新输入“工号和密码”,才能浏览特定页面。下面是个简单的例子:(JBuilder5做的)Jsp1.jsp和Jsp2.jsp
    ---------------------Jsp1.jsp------------------
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <head>
    <title>
    Jsp1
    </title>
    </head>
    <body>
    <h1>
    JBuilder Generated JSP
    </h1>
    <%
    %><form method="post" action = Jsp2.jsp>
    <br>Enter new value   :  <input name="sample"><br>
    <br><br>
    <input type="submit" name="Submit" value="Submit">
    <input type="reset" value="Reset">
    <br>
    </form>
    </body>
    </html>------------------Jsp2.jsp------------------------
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <head>
    <title>
    Jsp2
    </title>
    </head>
    <body>
    <h1>
    JBuilder Generated JSP
    </h1>
    <%  String s;  s = (String)session.getAttribute("test");  if ( s== null ){    s = request.getParameter("sample");
        if ( s == null ){
          out.println("can not get here directly, please enter jsp1.jsp first ");
        }
        else{
          out.println("session is null");
          out.println("read from form");
          session.setAttribute("test",s);
        }
      }
      else{    out.println("session is :" + s);  }%></body>
    </html>
    ---------------------------end of code-----------------启动tomcat后,注意如果直接浏览jsp2是不允许的,
    当先进入jsp1然后submit进入jsp2,第一次会提示session为空,以后就会显示第一次在jsp1里面输入的内容(包括刷新jsp2),但如果关闭该浏览器,再要直接浏览jsp2还是不允许的。显然此时session没有超时,说明这必定是一个新的session.
      

  10.   

    faint
    页面关掉的时候,session自然就丢失了,客户下次进来是必须要登陆的!
    服务器端的session是有失效时间的,不用设置的过短,要不然客户需要不停的重新登陆
    万一用户在你设定的时间到来之前关掉浏览器,然后又直接进入(不登录),并且
    仍然未到过期时间,怎么办?                ~~~~~~~~~~~~~~~~~~~~~~~~不可能!!
    那你就删掉服务器端上次的登陆信息,重新作一次登陆!
      

  11.   

    to hawk_js(鹰): 如果你愿意在每个一页面都判断session有无的话,那通过session
    就可意解决。
    还有一种办法:
    if (httpHeader.reference = "") /* 手入力URL */
    {
        /* forbidden, go to login page */
    }else {  /* 由别的画面迁移而来 */
       /* ok */
    }
      

  12.   

    to hawk_js(鹰): 如果你愿意在每个一页面都判断session有无的话,那通过session
    就可意解决。
    还有一种办法:
    if (httpHeader.reference = "") /* 手入力URL */
    {
        /* forbidden, go to login page */
    }else {  /* 由别的画面迁移而来 */
       /* ok */
    }
      

  13.   

    利用HttpSessionListener编写自己的监听器,如果浏览器被非法关闭,Session被去掉,将会调用你的监听器,你可以在监听器的ValueBound()和ValueUnBound()方法中处理相应的事件。可以看看Servlet规范,里面有描述。