- 浏览: 50327 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。
当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。
当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
实现URL重写
URL重写在客户端浏览器不支持Cookie(下章介绍)的情况下使用的,它是客户端浏览器请求服务器时,URL地址后面加上类似于 “SESSIONID=***”形式的参数,服务器端通过获取SESSIONID关键字来获取会话值。
在程序第一次访问服务器端时,服务端并不能确认客户端浏览器是否支持Cookie。因此,当服务器第一次发出请求时,服务端会默认采用URL重写,也就是将SESSIONID写到URL地址中传递。
核心代码:String SessionId=request.getRequestedSessionId();
当客户端发送请求后,服务器会根据提交给客户端浏览器的信息自动检查客户端是否启用了Cookie,如果启用,将不再进行URL重写。如果没有,则继续使用URL重写。
通过response对象的encodeURL(String url)方法可以进行URL重写。
public String encodeURL(String url);
对包含SessionID的URL进行编码。如果不需要编码,就直接返回这个URL。
Servlet引擎必须提供URL编码方法,因为在有些情况下,我们将不得不重写URL。
例如,在响应对应的请求中包含一个有效的Session,但是这个Session不能被非URL的(例如Cookie)的手段来维持。
所以所有提供给Servlet的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。
隐藏域和URL重写有着共同的优点:它们在Cookie被禁用或者根本不支持的情况下依旧能够工作。
缺点:
所有页面必须是表单提交之后的结果,还有涉及许多冗长的处理工作。
Cookie:
服务器默认创建一个Cookie回传给用户:(Cookie cookie = new Cookie("JSESSIONID",session.getId());response.addCookie(cookie);)此cookie的默认生命周期为关闭浏览器cookie即销毁,所以当浏览器关闭后,使用cookie实现的回话跟踪应用(如购物)将会失效。
解决浏览器关闭,装载sessionid的cookie 失效的问题: 可以通过创建一个名为"JSESSIONID"的cookie,然后设置cookie的生命周期(cookie.setMaxAge())来设置cookie的失效时间,如下:
如果用户禁用了cookie,则只能通过url重写的方式来实现回话跟踪。但是url重写的方式实现回话跟踪的不能解决浏览器关闭,无法获取原来的sessionid的问题,即不能解决浏览器关闭,回话失效的问题。关于使用url重写实现回话跟踪
一般大型的电子商务网站,一般是使用cookie实现回话跟踪的,因为如果使用session来实现回话跟踪的话,对服务器的压力很大,导致服务器性能下降!
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。
当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。
当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
- 1).隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用。
- 2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。 见 http://blog.csdn.net/xh16319/article/details/8464055
- 3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。 见:http://blog.csdn.net/xh16319/article/details/8464319
- 4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
实现URL重写
URL重写在客户端浏览器不支持Cookie(下章介绍)的情况下使用的,它是客户端浏览器请求服务器时,URL地址后面加上类似于 “SESSIONID=***”形式的参数,服务器端通过获取SESSIONID关键字来获取会话值。
在程序第一次访问服务器端时,服务端并不能确认客户端浏览器是否支持Cookie。因此,当服务器第一次发出请求时,服务端会默认采用URL重写,也就是将SESSIONID写到URL地址中传递。
核心代码:String SessionId=request.getRequestedSessionId();
当客户端发送请求后,服务器会根据提交给客户端浏览器的信息自动检查客户端是否启用了Cookie,如果启用,将不再进行URL重写。如果没有,则继续使用URL重写。
通过response对象的encodeURL(String url)方法可以进行URL重写。
public String encodeURL(String url);
对包含SessionID的URL进行编码。如果不需要编码,就直接返回这个URL。
Servlet引擎必须提供URL编码方法,因为在有些情况下,我们将不得不重写URL。
例如,在响应对应的请求中包含一个有效的Session,但是这个Session不能被非URL的(例如Cookie)的手段来维持。
所以所有提供给Servlet的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。
隐藏域和URL重写有着共同的优点:它们在Cookie被禁用或者根本不支持的情况下依旧能够工作。
缺点:
所有页面必须是表单提交之后的结果,还有涉及许多冗长的处理工作。
Cookie:
服务器默认创建一个Cookie回传给用户:(Cookie cookie = new Cookie("JSESSIONID",session.getId());response.addCookie(cookie);)此cookie的默认生命周期为关闭浏览器cookie即销毁,所以当浏览器关闭后,使用cookie实现的回话跟踪应用(如购物)将会失效。
解决浏览器关闭,装载sessionid的cookie 失效的问题: 可以通过创建一个名为"JSESSIONID"的cookie,然后设置cookie的生命周期(cookie.setMaxAge())来设置cookie的失效时间,如下:
package edu.session; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class BuyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); /** * 设置session的空闲失效时间有两种方式: * 1.在web.xml中设置: * <session-config> <session-timeout>2</session-timeout> </session-config> 2.设置session的maxInactiveInterval属性,(session的 默认空闲失效时间为30分钟,即30分钟内不 访问服务器,session将自动销毁)如下:session.setMaxInactiveInterval(2*60); 也可以通过 session.invalidate();销毁session **/ session.setAttribute("name", "联想笔记本"); /** * session的原理是通过向浏览器发送存放sessionId的cookie来实现session的,而存放sessionId的cookie的默认 * 生命为浏览器关闭cookie消亡,所以当用户关闭浏览器后,其购物车商品会消失,为避免这种情况,应设置存放 * sessionId的cookie的生命周期 **/ Cookie cookie = new Cookie("JSESSIONID", session.getId()); cookie.setMaxAge(30*60);//设置放置sessionId的cookie的生命周期为30分钟 cookie.setPath("/CookieAndSession"); response.addCookie(cookie); } }
如果用户禁用了cookie,则只能通过url重写的方式来实现回话跟踪。但是url重写的方式实现回话跟踪的不能解决浏览器关闭,无法获取原来的sessionid的问题,即不能解决浏览器关闭,回话失效的问题。关于使用url重写实现回话跟踪
一般大型的电子商务网站,一般是使用cookie实现回话跟踪的,因为如果使用session来实现回话跟踪的话,对服务器的压力很大,导致服务器性能下降!
发表评论
-
Java之Concurrent(并发)包
2015-09-25 16:31 313因为实在是太多了,太长了,一时间无法自习整理和消化,先 ... -
Java集合框架
2015-09-25 16:31 389集合框架有很多的 ... -
final, finally, finalize的区别
2015-09-19 11:39 3861.final final修饰类,说明 ... -
java中volatile关键字的含义
2015-09-19 10:59 376在java线程并发处理中, ... -
java笔记--关于线程同步(5种同步方式)
2015-09-19 10:21 413[size=medium]为何要使用同步? java ... -
RPC
2015-07-30 11:04 386RPC 功能目标 RPC 的 ... -
Java NIO原理文分析及代码实现
2015-07-22 10:43 426Java NIO原理图文分析及代码实现 前言: 最近在分 ... -
NIO学习(一)
2015-07-22 10:43 325[size=medium]NIO学习 一.NIO中的几个基础 ... -
Java IO浅谈
2015-07-21 13:12 305Java IO浅谈 [size=large] ... -
线程池(二)
2015-07-21 12:29 361Java ... -
线程池(一)
2015-07-21 12:11 362线程池 在上一篇博客中,我们有提及阻塞IO的为每个连接请求 ... -
多种IO设计模式
2015-07-21 11:45 450Java通信的几种IO设计 [size=large]阻塞IO ... -
阻塞与非阻塞-----同步与异步
2015-07-21 11:31 477阻塞(blocking)与非阻塞(non-blocking)I ...
相关推荐
JSP提供了四种主要的会话跟踪技术,确保在多个请求之间存储和检索用户信息。 1. **Page Context(页面范围)** 页面范围是最小的范围,仅在当前的JSP页面中有效。任何在`<jsp:declaration>`、`<jsp:scriptlet>`、`...
为了识别这些操作属于同一个用户,服务器需要一种方式来跟踪用户,这就是会话跟踪。在HTTP协议本身是无状态的,因此不能自动维持会话信息,所以我们需要借助额外的技术手段。 1. **Cookie**:Cookie是服务器发送到...
除了HttpSession,还有其他几种会话跟踪技术,包括: 1. **隐藏表单域**:在HTML表单中包含一个隐藏字段,其中包含了会话ID。当表单提交时,这个ID会随数据一起发送回服务器。 2. **URL重写**:将会话ID附加到URL...
### 会话状态跟踪技术选择 在Web应用开发过程中,会话状态跟踪是实现用户个性化体验和服务连续性的重要环节。所谓“会话状态跟踪”,即系统通过某种方式记录并跟踪用户的活动状态,以便于在不同请求之间保持一致性...
为了解决这个问题,开发者利用各种会话跟踪技术来保持用户的上下文。本篇文章将深入探讨JavaWeb中的会话跟踪技术。 首先,最常见的会话跟踪方法是使用Cookie。Cookie是由服务器发送到客户端(浏览器)的一小段数据...
在JSP(JavaServer Pages)开发中,会话跟踪(Session Tracking)是一项核心技术,它允许应用程序在多个请求之间保持用户的状态信息。...理解和熟练掌握会话跟踪技术,有助于提高Web应用的用户体验和安全性。
会话跟踪技术是Web应用程序中不可或缺的一部分,它主要用于在用户浏览多页时保持其状态,以便提供个性化的用户体验和服务。传统的会话跟踪技术主要包括Cookie、URL重写和隐藏表单字段。 Cookie技术是最常见的会话...
#### 一、会话控制概述 ...**会话控制**是指在网络应用中,通过特定机制来跟踪用户与服务器之间的交互过程,从而维持用户的状态信息...通过合理利用会话跟踪技术,不仅可以提升用户体验,还能有效保障应用程序的安全性。
会话跟踪技术cookie,session
总的来说,Session会话跟踪技术是Web后端开发中实现用户登录、注销功能的关键,通过合理地管理和运用Session,可以提供更安全、更便捷的用户体验。在实际项目中,需要结合具体需求和环境,灵活选择和优化Session的...
在这个过程中,为了在多个请求之间共享数据,开发者会利用Cookie和Session这两种主要的会话跟踪技术。 **Cookie技术详解** 1. **什么是Cookie** Cookie是一个由服务器生成并发送到客户端浏览器的键值对,用来识别...
java面试题1逻辑题,很多都是给出几个数,然后找规律添空缺的数 2简答,什么是javabean;(2)编程题,用递归方法实现什么功能 (3)数据库,基本的sql语句 ... 四种会话跟踪技术? 3 1+2+3+4+...+100做成函数
会话跟踪技术是Web应用程序中用于识别和管理客户端与服务器之间的交互的一种机制。它主要用于维持用户在整个Web应用程序访问过程中的状态信息,确保服务器能够识别不同的用户及其操作。会话跟踪技术在Java Web开发中...
【会话跟踪技术详解】 在Web开发中,服务器通常无法识别出同一个客户端的连续多次连接,因为HTTP协议本身是无状态的。为了在多个请求之间保持客户端的状态,我们需要使用会话跟踪技术。会话跟踪允许服务器识别并...
Web的会话跟踪刨析
### 美团Mtrace分布式会话跟踪系统架构设计与实践 #### 一、Mtrace项目简介 Mtrace是美团内部开发的一款分布式会话跟踪系统,旨在解决日益复杂的分布式系统中的服务调用关系梳理问题。在这样的系统环境中,每一个...
Servlet 提供了两种类型的会话技术,即 Cookie 和 Session,下面我们将详细介绍这两种技术的实现原理和应用场景。 一、Cookie 对象和常用 API Cookie 是一种小型文本文件,存储在客户端浏览器中,用于记录用户的...
由于HTTP请求是独立的,服务器无法知道两次请求是否相关,这就需要会话跟踪技术来保持用户的会话状态。 1. **Cookie机制**:这是最常用的会话跟踪方式。服务器在响应客户端(浏览器)时,通过Set-Cookie响应头发送...
本资源"java web整合开发王者归来光盘代码-第五章 会话跟踪"正是针对这一主题,提供了丰富的示例和代码,帮助开发者深入理解和掌握会话跟踪技术。 会话跟踪是指在用户的多个请求之间保持某些状态信息。在无状态的...