2018.8.18 servlet使用的会话跟踪除session外还有哪些方式
解释HTTP
HTTP是一种无连接的协议,如果一个客户端只是单纯地请求一个文件(HTML或GIF),服务器端可以响应给客户端,并不需要知道一连串的请求是否来自于相同的客户端,而且也不需要担心客户端是否处在连接状态。但是这样的通信协议使得服务器端难以判断所连接的客户端是否是同一个人。当进行Web程序开发时,我们必须想办法将相关的请求结合一起,并且努力维持用户的状态在服务器上,这就引出了会话追踪(session tracking)。
:会话与会话追踪
session中文经常翻译为“会话”,其本来的含义是指有始有终的一系列动作或消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候可以看到这样的话“在一个浏览器会话期间……”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间;如果说“用户在一次会话期间……”这样一句话,它指用户的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程;然而有时候也可能仅仅是指一次连接。session的含义很多,其中的差别只能靠上下文来推断。session tracking(会话追踪)是指一类用来在客户端与服务器之间保持状态的解决方案,简单地说,当一个客户在多个页面间切换时,服务器会保存该用户的信息。
2:实现会话追踪的4种方式会话追踪的实现方式有下列4种方式:
(1)使用持续Cookies(Persistent Cookies)。
(2)重写包含额外参数的URL(URL Rewriting)。
(3)建立含有数据的隐藏表单字段(Hidden Form Field)。
(4)使用内建session对象。
2.1使用Cookie
Cookie是一个小小的文本文件,它是将会话信息记录在这个文本文件内,每个页面都去Cookie中提取以前的会话信息
Cookie sessionCookie =new Cookie("JSESSIONID", sessionID);
sessionCookie .setMaxAge(1*24*60*60);
response.addCookie(sessionCookie);
上面这段代码先将会话信息记录在HashMap中,保存在服务器端,并用sessionID标识,然后把sessionID保存在名为“JSESSIONID”的Cookie中。
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("JSESSIONID")){
sessionid = cookies[i].getValue();
break;
}
}
if(sessionid!=null){
sessionInfo = globalTable.get(sessionid);
//We can use the sessionInfo to get value that we want
}
}
用户请求到达服务器后,先从Cookie中取出sessionID,然后从HashMap中取出会话信息。这样就实现了会话追踪。
URL 重写
URL重写是利用GET的方法,在URL的尾部添加一些额外的参数来到达会话跟踪Session 的目的,服务器将这个标识符与它所存储的有关会话的数据关联起来
使用URL重写的优点是Cookie被禁用或者根本不支持的情况下依旧能够工作。但也有很多缺点:
1. 必须对所有指向您的网站的URL进行编码。
2. 所有页面必须动态生成。
3. 不能使用预先记录下来的URL进行访问,或者从其他网站链接进行访问。
2.3:隐藏表单字段
隐藏表单字段的方法,是利用HTML内hidden的属性,把客户端的信息,在用户不察觉的情形下,偷偷地随着请求一起传送给到服务器处理,这样一来,就可以进行会话跟踪的任务了。可以下列的方法来做隐藏表单字段的会话追踪。
<input type="hidden" name="userID" value="15">
然后将重要的用户信息,如ID之类独一无二的数据,以隐藏字段的方式传送给服务器。隐藏字段的优点在于session数据传送到服务器端时,并不象GET的方法,会将session数据保露在URL之上。不过这种做法还是有它的缺点:一旦session数据储存在隐藏字段中,就仍然有暴露数据的危机,因为只要用户直接观看HTML的源文件,session数据将会暴露无疑。这将造成安全上的漏洞,特别当用户数据是依赖于用户ID、密码来取得的时候,将会有被盗用的危险。另外这种方法只适用特定的一个流程,不适用于通常意义的会话跟踪。
2018.8.18 servlet使用的会话跟踪除session外还有哪些方式的更多相关文章
- 会话跟踪之Session
Session是服务端使用记录客户端状态的一种机制,Session使用简单,但是和Cookie相比,增加了服务器的存储压力[因为为了追求速度,服务器将Session放置在了内存中].Cookie是保存 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 设置Session存活时长
方式一:修改所有的session默认时长,修改tomcat目录下的conf文件夹下的web.xml文件. <session-config> <session-timeout>希 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 获取Session对象
Session对象的获取有两种: ● 有参方法: HttpSession request.getSession(boolean isNew) 参数: true:获取一个Session对象,如果之前S ...
- IT兄弟连 JavaWeb教程 Servlet 状态管理 会话跟踪
HTTP协议是无状态的,我们的客户端与服务器的每一次请求与响应,我们服务器都没有记忆能力将客户端与服务器的多次交互数据进行存储与管理共有两种技术实现: ● 基于客户端实现:Cookie,将状态保存在 ...
- 会话跟踪技术——Session
一.什么是Session Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期.在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分. Se ...
- 04-cookies 会话跟踪技术
1.会话跟踪技术 1.Http协议的无状态保存 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2 .会话路径技术使用Cookie或session完成 我们知道HTTP协 ...
- JavaWeb04-JSP及会话跟踪技术
JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 1.2 JSP的 ...
- JSP基础--会话跟踪技术、cookie、session
会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...
- Django - cookies 会话跟踪技术
一.HTTP协议的无状态保存 两次请求之间没有关联 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2.会话路径技术使用Cookie或session完成 我们知道HTTP ...
随机推荐
- 导入json文件报错,TypeError expected string or buffer
导入json文件报错,TypeError expected string or buffer 原因:用字符串赋值后,python会把双引号转换为单引号 import json data = [{&qu ...
- QQ号_保存_20180124
1.1337978907 (密码:33+我的名字全小写全部拼音) 2. 3. 4. 5.
- Vue.js-----轻量高效的MVVM框架(十二、组件动态切换)
在写html的过程中,我们经常会遇到要写tabs的切换,类似于这样: 在vue中,我们也有自己的组件和属性来实现这样的效果,这个东西我们叫做动态组件. html: <h3>动态组件< ...
- Robotframework测试相关库
一. 官网地址 http://robotframework.org/#libraries 二.几类测试所用到的常用库初步整理 1. UI自动化测试 Selenium2Library.BuiltIn(自 ...
- Android NDK开发 环境配置(一) 之多重CPU的兼容性
今天我学习Android Studio当中的NDK,为什么要学习NDK呢,是因为领导给我提了一个BUG,这个BUG就是Android 多重CPU怎样兼容性,我现在先说一下,Android Studio ...
- 20181031 temp
https://wiki.jenkins.io/display/JENKINS/M2+Release+Plugin https://issues.jenkins-ci.org/browse/JENKI ...
- javascript中typeof与instanceof的区别
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...
- 利用ssh传输文件-服务器之间传输文件
利用ssh传输文件 在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/ ...
- Zookeeper配置Kafka
Zookeeper安装 解压:tar -zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz -C ~/app/ 配置到环境变量: vi ~/.bash_profile expor ...
- 创建weblogic受管理服务器和安全文件
启动 admin server Oracle/Middleware/user_projects/domains/base_domain/bin> startWebLogic.sh 1创建受管服务 ...