目前需要实现这样一个功能:同一个页面只能出一个。就是说如果一个页面已经打开了,那么再次在地址栏里输入,或者通过链接访问这个页面时,都不能打开。思路很简单:当打开这个页面时,判断session的hasOpened有没有值,如果没有,在session里设置hasOpend;如果有,就不打开。难点是这里:在已经打开的页面关闭时,要把这个hasOpened属性清空,要不然就再也打不开了。但是什么时候页面关闭,jsp是判断不了的,得用javascript,但是javascript又设置不了session的值。唯一的方法是用javascript判断关闭窗口时,转向另外一个jsp,在那里设置session。问题就是:如何在页面关闭时,转向另一个jsp?不能用window.open(),因为会被屏蔽掉。设置location也不行。试过了。

解决方案 »

  1.   

    既然想到了Javascript,为什么不用Ajax呢
      

  2.   

    Ajax啊,还不是很了解。需要特殊的支持吗?
      

  3.   

    在body标记中加上onunload="quit.jsp",在quit.jsp中处理Session
      

  4.   

    http://www.blogjava.net/jfy3d/archive/2005/05/14/4279.aspx
      

  5.   

    jfy3d(剑事) 的解决方法很特别,用了iframe,能很好的解决关闭时的问题。但是刷新的时候怎么能够返回回来呢,因为这个问题和检测是不是在线还不一样,在线检测不用管刷新,刷新还是在线上;这个刷新时,也必须把session的某个值清空,因为一旦第一次正确的打开这个页面,session里这个值已经有了,如果在刷新时不清空,就会把自己踢出去。可以刷新时,速度太快,提交还没有改变这个值,本页已经读完了。就提示说这一页已经打开了。---在刷新代码里写转向、提交等方法,都不能执行。有什么方法可以解决这个问题吗?
      

  6.   

    你可以吧执行代码写到 body的 unload事件了我这个把关闭IE和刷新IE 区分开的
      

  7.   

    恩,已经试了,是不行的,刷新由于太快,来不及改变这个值,如果在这里加一个alert来延迟一下时间就行。可是加alert会让用户很反感。---先谢谢了。呵呵。
      

  8.   

    window.opener.location="";
    window.parent.location="";
      

  9.   

    非常关注。
    不过
    在body标记中加上onunload="quit.jsp",在quit.jsp中处理Session
    这样的方法肯定是不行的,会弹出新窗口,新窗口往往会被屏蔽掉,尤其是XP系统。