JSP关于用户安全退出的问题
从form中获取用户提交的认证信息并经过验证后,登陆动作简单地往 HttpSession对象中写入一个用户名,
session.setAttribute("User", userName);
退出动作则做相反的工作,
session.removeAttribute("User");
session.invalidate();
它从用户的HttpSession对象中删除用户名并调用invalidate()方法销毁HttpSession。为了使登陆和退出动作真正发挥作用,所有受保护的JSP页面都应该首先验证HttpSession中是否包含了用户名以确认当前用户是否已经登陆。如果HttpSession中包含了用户名,也就是说用户已经登陆,Web应用则将剩余的JSP页发送给浏览器,否则,JSP页将跳转到登陆页login.jsp。
String userName = (String) session.getAttribute("User");
if (null == userName) {
request.setAttribute("Error", "Session has ended. Please login.");
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
大部分浏览器都有一个后退按钮。当点击后退按钮时,默认情况下浏览器不是从Web服务器上重新获取页面,
而是从浏览器缓存中载入页面。基于Java的Web应用并未限制这一功能,在基于PHP、ASP和.NET的Web应用中也同样存在这一问题。在用户点击后退按钮后,浏览器到服务器再从服务器到浏览器这样通常意思上的HTTP回路并没有建立,仅仅只是用户,浏览器和缓存进行了交互
幸运的是,HTTP头信息“Expires”和“Cache-Control”为应用程序服务器提供了一个控制浏览器和代理服务器上缓存的机制。HTTP头信息Expires告诉代理服务器它的缓存页面何时将过期。HTTP1.1规范中新定义的头信息Cache-Control可以通知浏览器不缓存任何页面。当点击后退按钮时,浏览器重新访问服务器已获取页面。
" no-cache:强制缓存从服务器上获取新的页面
" no-store: 在任何环境下缓存不保存任何页面
HTTP1.0规范中的Pragma:no-cache等同于HTTP1.1规范中的Cache-Control:no-cache,同样可以包含在头信息中。
通过使用HTTP头信息的cache控制,第二个示例应用logoutSampleJSP2解决了logoutSampleJSP1的问题。logoutSampleJSP2与logoutSampleJSP1不同表现在如下代码段中,这一代码段加入进所有受保护的页面中:
在jsp页面中可使用如下代码实现无缓存:
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
这些代码加在<head> </head>中间具体如下
<head>
<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>
通过设置头信息和检查HttpSession中的用户名确保了浏览器不缓存页面,同时,如果用户未登陆,受保护的JSP页面将不会发送到浏览器在用户点击后退按钮后,浏览器到服务器再从服务器到浏览器这样通常意思上的HTTP回路并没有建立,仅仅只是用户,浏览器和缓存进行了交互。
JSP关于用户安全退出的问题相关推荐
- ASP.NET在线用户列表精确版——解决用户意外退出在线列表无法及时更新问题
最近所做的一个项目需要用到的在线用户列表,上网搜索了一下发现现有的解决方案对用户意外退出的处理均不是太理想.一般来说,用户离开系统的方式有三种:主动注销.会话超时.直接关闭浏览器,对于前两种,我们很容 ...
- 页面强制全屏,且退出全屏提示用户无法退出
下面都是方法,写在methods 全屏 //全屏 qp(){let a=document.getElementById("quanp")//指定diva.requestFullsc ...
- 【javaweb:eljstl】通过模拟用户登录,使网页登录测试部分变成“用户”和“退出”
1.模拟用户登录部分,访问一个jsp,在jsp中嵌入java代码,然后再session域中存入user对象, 表示用户已经登录了.代码如下: <%@ page language="ja ...
- c语言按shift用户随时退出,2014年云南省“三校生”高考计算机第三次模拟试卷...
密 班级: 姓名: 学号: 密 封 线 内 不 得 答 题 玉龙职高2012年高考第三次模拟试卷 计算机基础 总分:150分,考试时间:120分钟. 一.单项选择题(在每小题给出的四个选项中,只有一个 ...
- 解决用户意外退出在线列表无法及时更新问题2(转载)
1 一般来说,用户离开系统的方式有三种:主动注销.会话超时.直接关闭浏览器,对于前两种,我们很容易便可将该用户从在线列表中清除,关键是第三种(很多用户都是直接关闭窗口的~~郁闷ing),程序无法捕获窗 ...
- 【JSP】用户信息界面操作 ---- 用户信息修改
文章目录 用户信息界面操作 ---- 用户信息修改 Ⅰ.修改userinfo.jsp 实现修改页面跳转 Ⅱ.创建 userUpdate.jsp 修改页面 Ⅲ.完善 dbHelper类,添加用户修改方法 ...
- 如何实现登录互踢 即如何实现当用户登录之后 如果在其他地方再次登录 则这边的用户自动退出系统...
我先写一下基本思路,首先在用户数据库表里面加一个String token 然后 每次登录 随机生成一个六位数作为token, 分别存进数据库和session . 登录之后 在主界面写一个定时jq方法 ...
- 计算机用户如何退出系统,四种方法教你退出Windows10账户
如何退出Windows10账户?Win10系统用户在电脑中打开某些程序时,经常会遇到提示"你要允许以下程序对此计算机进行更改吗?".很多用户都觉得这个提示很烦人,希望能够把用户帐户 ...
- 微信的用户已退出是什么意思_乐此不疲的微信运动点赞是什么意思?网友:原来是这样...
微信体育现已发展成为另一种社交方式.对于微信体育,每个人实际上都是一个非常熟悉的功能.由于微信加入了该功能,可以计算步数和排名好友,因此可以说很多用户对我的使用感到非常高兴,因此让我们来谈谈微信活动中 ...
最新文章
- 5个java框架及其优缺点_各种Java Web框架的优缺点是什么?
- 在cisco路由器上实现DHCP功能实例
- TensorFlow 运行官方文档中文版 简单例子出现:IndentationError:unexpected indent
- 小学生python-小学生都在学python
- 个人电脑详细的安全设置方法之一
- JavaScript的10种跨域共享的方法
- AT2365-[AGC012E]Camel and Oases【状压dp】
- React Native使用指南-植入原生应用
- Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nvm的安装与配置(4)
- zookeepe安装配置_Zookeeper安装配置及简单使用
- jquery实现某宝放大点击切换
- 月份对比_行业洞察 | 10月份行业概览amp;头部广告主盘点
- Blender插件之Panel
- ResNet网络理解
- Hbase-day03_java操作hbase_hbase_各种过滤器使用
- 安装到到setup support files时,SQL2008安装程序自动消失掉。
- 计算机应用基础 电子科技大学出版社,大学计算机基础课本答案(电子科技大学出版社)...
- 完整的连接器设计手册_连接器退化机理(二)—腐蚀
- Excel快速实现中英文分列
- 与MySQL的纠缠(卸载与安装)