在JAVA中,如何在Session退出时,触发和调用程序?

siu5 2008-10-26 11:11:12
在写JAVA项目的时候,遇到Session退出时要解决的两个问题:
1、超时退出时,如何跳转到登录的页面(例如index.jsp)?
2、退出后,如何避免点击后退按钮导致重新进入退出前的页面?
就像那些银行的网页,退出之后,再点击后退按钮,就会弹出窗口,告知“已退出”。
...全文
452 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
andyhenghu 2008-12-19
  • 打赏
  • 举报
回复
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

这个需要放在JSP页面里面的

<%@ page language="java" contentType="text/html; charset=gb2312"%>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
%>
siu5 2008-12-16
  • 打赏
  • 举报
回复
void attributeRemoved(HttpSessionBindingEvent e){}//当Session 被删除时触发
请问不允许后退的代码应该怎么写呢?
是删除缓存还是屏蔽浏览器的后退按钮?删除缓存的代码应该怎么写?
siu5 2008-12-16
  • 打赏
  • 举报
回复
我建立了一个SessionOut.java文件放在Servlet目录,但并没有预期的效果,请问怎样修改呢?

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class SessionOut extends HttpServlet{
void attributeRemoved(HttpSessionBindingEvent e,HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{ //当Session 被删除时触发
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}


web.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<listener><listener-class>servlet.SessionOut</listener-class></listener>


<servlet>
<servlet-name>VCodeServlet</servlet-name>
<servlet-class>servlet.VCodeServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>CustomerServlet</servlet-name>
<servlet-class>servlet.CustomerServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>EmployeeServlet</servlet-name>
<servlet-class>servlet.EmployeeServlet</servlet-class>
</servlet>



<servlet-mapping>
<servlet-name>EmployeeServlet</servlet-name>
<url-pattern>/EmployeeServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>VCodeServlet</servlet-name>
<url-pattern>/VCodeServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CustomerServlet</servlet-name>
<url-pattern>/CustomerServlet</url-pattern>
</servlet-mapping>
</web-app>
pxhoonet 2008-12-15
  • 打赏
  • 举报
回复
顶17楼
qap22 2008-12-14
  • 打赏
  • 举报
回复
ding
_Nick_ 2008-12-14
  • 打赏
  • 举报
回复

你可以继承一个监听类

HttpSessionAttributeListener

void attributeAdded(HttpSessionBindingEvent e){}//当Session 被加入时触发
void attributeRemoved(HttpSessionBindingEvent e){}//当Session 被删除时触发
void attributeReplaced(HttpSessionBindingEvent e){}//当Session 被改变时触发

web.xml要改下配置<listener><listener-class>***</listener-class></listener>
wap21 2008-12-14
  • 打赏
  • 举报
回复
up
Eric_CY 2008-12-14
  • 打赏
  • 举报
回复
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);


你这种方法只是禁止了在读取页面信息是不向IE缓存中写数据,咱们正常浏览网页的并后退的时候往往是读取缓存中的数据,而不是重新加载。你这么写顶多是在后退时重新加载一下页面! 达不到你的要求的 !
jimmycap 2008-12-14
  • 打赏
  • 举报
回复
可以写过个过滤器麻,这个好用..
siu5 2008-12-14
  • 打赏
  • 举报
回复
哎呀,真不好意思,还是不明白“javascrip里面的覆盖”是什么意思?
是不是写成:

location.replace("网页路径")

这个样子?
我见到一些银行的网站,退出之后,浏览器的后退按钮立刻变成灰色的(即没有了前面的网页了)。这种又是怎样实现的呢?
ningyougang 2008-12-13
  • 打赏
  • 举报
回复
顶楼主
zhuolei123 2008-12-13
  • 打赏
  • 举报
回复
试下javascrip里面的覆盖
location.replace("网页路径")
zhuolei123 2008-12-13
  • 打赏
  • 举报
回复
javascript:
试下这个:location.replace("要替换的网页"),覆盖了后应该不能后退的饿
Loufeifei 2008-12-12
  • 打赏
  • 举报
回复
使用httpsessionlistener,当session销毁后出发里面的sessionDestroyed方法。
siu5 2008-12-12
  • 打赏
  • 举报
回复
请问7楼:“禁止后退”是不是用<javascript>来实现?
steryzone 2008-12-11
  • 打赏
  • 举报
回复
当他有新的请求的时候在servlet中判断他的权限
后退的时候,可以判断权限,判断session,禁止后退等都能实现
siu5 2008-11-21
  • 打赏
  • 举报
回复
CSDN又催着我结贴,但我还是不死心,因为很多网站都可以做得到。
无意中看到一个生成验证码的程序,里面有这样几行代码及注释:

//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);



但我拷贝到我的代码里面之后,却产生不了效果。可否请高手再指点一下。
siu5 2008-10-29
  • 打赏
  • 举报
回复
问题是:过滤器是不能过滤按“后退”按钮而去到的页面的啊!
而且,那些银行和电子邮件网站,并没有屏蔽掉“后退”按钮的。
我知道Asp.NET的response有个Cache清空的方法,如果我不用hibernate,Java里面有没有类似的方法呢?
qq278095755 2008-10-27
  • 打赏
  • 举报
回复
你完全可以写一个过滤器的,在过滤器中判断session是否失效,然后做一些你想要的事件。
耶律火柴 2008-10-27
  • 打赏
  • 举报
回复
第一个问题:
如果你用了struts可以继承RequestProcessor这个类然后重写这个类里的
processPreprocess(HttpServletRequest request, HttpServletResponse response)这个方法。
然后 在struts-config.xml里配置
<controller contentType = "text/html;charset=GB2312"
locale="true"
nocache="true"
processorClass="包名.类名" />

第二个问题:用js禁止后退功能.
加载更多回复(2)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧