- 浏览: 435204 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (167)
- 技术文章 (26)
- HTML & XHTML & XML (16)
- javascript (11)
- ajax (1)
- css (8)
- spring (1)
- hibernate (8)
- struts (4)
- SEO&SEM (6)
- php (13)
- MySQL (11)
- Oracle (1)
- 学习笔记 (26)
- 技术文档下载 (6)
- 笔随心动 (16)
- 奇闻天下 (7)
- 其他文档 (10)
- Unity3d (1)
- memcached (1)
- PHP 浏览器版本 os 操作系统版本 (1)
- maven (1)
- Android (1)
- php是 (1)
- lower_case_table_names=1 (1)
最新评论
-
18335864773:
目前 用pageoffice组件的比较多.POI对Office ...
Poi的一个实例——用SQL动态导出Excel文件 -
afreon:
http://blog.yoodb.com/yoodb/art ...
org.hibernate.WrongClassException 错误解决 -
springaop_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven Pom.xml 元素详解 -
影非弦:
显示的是A server error has occurred ...
DWR 弹出Error 解决 -
xu3352:
非常不错,:idea: ,感谢楼主
CSS3 中文文档
HTTP协议 ( http://www.w3.org/Protocols/ )是“一次性单向”协议。
服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。
我们看到,HTTP协议本身并不能支持服务端保存客户端的状态信息。于是,Web Server中引入了session的概念,用来保存客户端的状态信息。
这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾 客,作为取包凭证(这个号码牌就是Session ID)。顾客(HTTP Request)下一次来的时候,就要把号码牌(Session ID)交给存包处(Web Server)的管理员。管理员根据号码牌(Session ID)找到相应的柜子(Session),根据顾客(HTTP Request)的请求,Web Server可以取出、更换、添加柜子(Session)中的物品,Web Server也可以让顾客(HTTP Request)的号码牌和号码牌对应的柜子(Session)失效。顾客(HTTP Request)的忘性很大,管理员在顾客回去的时候(HTTP Response)都要重新提醒顾客记住自己的号码牌(Session ID)。这样,顾客(HTTP Request)下次来的时候,就又带着号码牌回来了。
我们可以看到,Session ID实际上是在客户端和服务端之间通过HTTP Request和HTTP Response传来传去的。
我们看到,号码牌(Session ID)必须包含在HTTP Request里面。关于HTTP Request的具体格式,请参见HTTP协议(http://www.w3.org/Protocols/ )。这里只做一个简单的介绍。
在Java Web Server(即Servlet/JSP Server)中,Session ID用jsessionid表示(请参见Servlet规范)。
HTTP Request一般由3部分组成:
(1)Request Line
这一行由HTTP Method(如GET或POST)、URL、和HTTP版本号组成。
例如,GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
GET http://www.google.com/search?q=Tomcat HTTP/1.1
POST http://www.google.com/search HTTP/1.1
GET http://www.somsite.com/menu.do;jsessionid=1001 HTTP/1.1
(2)Request Headers
这部分定义了一些重要的头部信息,如,浏览器的种类,语言,类型。Request Headers中还可以包括Cookie的定义。例如:
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Accept-Language: en-us
Cookie: jsessionid=1001
(3)Message Body
如果HTTP Method是GET,那么Message Body为空。
如果HTTP Method是POST,说明这个HTTP Request是submit一个HTML Form的结果,
那么Message Body为HTML Form里面定义的Input属性。例如,
user=guest
password=guest
jsessionid=1001
主意,如果把HTML Form元素的Method属性改为GET。那么,Message Body为空,所有的Input属性都会加在URL的后面。你在浏览器的URL地址栏中会看到这些属性,类似于
http://www.china.cn/login.do?user=guest&password=guest&jsessionid=1001
从理论上来说,这3个部分(Request URL,Cookie Header, Message Body)都可以用来存放Session ID。由于Message Body方法必须需要一个包含Session ID的HTML Form,所以这种方法不通用。
一般用来实现Session的方法有两种:
(1)URL重写。
Web Server在返回Response的时候,检查页面中所有的URL,包括所有的连接,和HTML Form的Action属性,在这些URL后面加上“;jsessionid=XXX”。
下一次,用户访问这个页面中的URL。jsessionid就会传回到Web Server。
(2)Cookie。
如果客户端支持Cookie,Web Server在返回Response的时候,在Response的Header部分,加入一个“set-cookie: jsessionid=XXXX”header属性,把jsessionid放在Cookie里传到客户端。
客户端会把Cookie存放在本地文件里,下一次访问Web Server的时候,再把Cookie的信息放到HTTP Request的“Cookie”header属性里面,这样jsessionid就随着HTTP Request返回给Web Server。
我们来看Tomcat5的源代码如何支持jsessionid。
org.apache.coyote.tomcat5.CoyoteResponse类的toEncoded()方法支持URL重写。
String toEncoded(String url, String sessionId) { … StringBuffer sb = new StringBuffer(path); if( sb.length() > 0 ) { // jsessionid can't be first. sb.append(";jsessionid="); sb.append(sessionId); } sb.append(anchor); sb.append(query); return (sb.toString()); }
我们来看org.apache.coyote.tomcat5.CoyoteRequest的两个方法configureSessionCookie()
doGetSession()用Cookie支持jsessionid.
/** * Configures the given JSESSIONID cookie. * * @param cookie The JSESSIONID cookie to be configured */ protected void configureSessionCookie(Cookie cookie) { … } HttpSession doGetSession(boolean create){ … // Creating a new session cookie based on that session if ((session != null) && (getContext() != null) && getContext().getCookies()) { Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME, session.getId()); configureSessionCookie(cookie); ((HttpServletResponse) response).addCookie(cookie); } … }
Session的典型应用是存放用户的Login信息,如用户名,密码,权限角色等信息,应用程序(如Email服务、网上银行等系统)根据这些信息进行身份验证和权限验证
1:Session对象在浏览器中的有效范围:
IE中:
1〉.Session对象只在建立Session对象的窗口中有效。
2〉.在建立Session对象的窗口中新开链接的窗口也有效。
Session只会在内存中,他会随着IE窗口的关闭而死亡。
也就是说单用seesion是不会有产生自动登入的效果的。
2:Cookie 是在服务器给客户端IE一个命令后在客户端产生并存的,
它可以存放用户信息,存到客户端硬盘上,在COOKIE记录被删除
或者失效日期之前,就可以实现自动登入的现象。
3:Session 和 Cookie 是不同的,但是他们确实是相关的。
当打开IE登入后,会向服务器发出一个指令请求SESSIONID以
及页面内容,服务器会返回页面内容和一个没有被使用的
SESSIONID让此IE使用,当时IE就对返回SESSIONID做存储;而当此IE再访问任何这个站点的JSP程序的时候,都会给服务器这个 SESSIONID,来确认客户端的身份。(在没有Cookie 的情况下session死亡 SESSIONID被取消就需要重新登入)
4:可以通过客户端禁用和不禁用cookie来验证自己的说法。
转自:http://blog.csdn.net/zhq426/archive/2008/09/28/2992488.aspx
发表评论
-
Cannot create instance of interface org.apache.maven.artifact.repository.Artifac
2016-02-26 18:09 1249maven构建子模块时报错,cmd如下: mvn arch ... -
数字绕圈算法 JS 实现
2014-06-25 01:26 1424这是一道某公司的算法题,我们姑且称之为“数字绕圈算法”。 ... -
VS2012警告未能加载包“Visual C++ package”
2014-02-19 15:33 2467安装了windows更新后就出现VS2012无法打开项目的问 ... -
Apktool 用法
2013-07-23 10:21 1291最近研究cocos2dxhtml5这块,由于是跨平台的,所以 ... -
文本文件和二进制文件的区别
2010-05-20 10:30 1662From: http://blog.csdn.net/s ... -
org.codehaus.classworlds.NoSuchRealmException: plexus.core at org.codeha
2010-02-27 23:25 2511很简单,直接找到maven_home\conf\setting ... -
HTTPClient PostMethod 乱码问题
2010-01-14 12:03 8029虽然这是篇老文,不过还是忍不住转过来看看。 类别标签: ... -
HashTable和HashMap的区别
2009-12-02 14:47 1002HashTable的应用非常广泛,HashMap是新框架中用来 ... -
JAVA内存溢出解析
2009-11-06 19:46 2416原因有很多种,比如: 1.数据量过于庞大;死循环 ; ... -
FCK Editor 不能显示问题
2009-06-24 16:03 3392匪夷所思的问题: 页面中使用了FCK,比如这么引用标记 ... -
用ChartDirector 画饼
2009-06-22 10:18 2192ChartDirector是一款简单使用的图形报表工具,足以应 ... -
怎样打开端口
2009-06-07 16:47 2700每一项服务都对应相应 ... -
org.slf4j.impl.StaticLoggerBinder.SINGLETON
2009-06-05 16:03 12208tried to access field org.slf4j ... -
软件工程师不可不知的10个概念
2009-02-05 15:45 953出色的软件工程师善用 ... -
如何提高数据库查询速度
2009-02-05 15:37 17151、用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次 ... -
Log4j和commons-logging
2009-02-05 13:28 1978一 :为什么同时使用com ... -
为什么使用Serializable(序列化)
2009-02-04 17:30 1226经常看到有些类调用了Serializable接口,而有 ... -
Perl 内置变量
2009-02-04 13:55 1137$- 当前页可打印的行数,属于perl格式系统的一部分 $! ... -
什么是 RSS
2009-02-01 13:25 1303什么是 RSS? RSS是一种网页内容联合格式(web ... -
MD5算法
2009-01-27 23:38 1193算法介绍 MD5的全 ...
相关推荐
在ASP.NET中,Session的实现主要依赖于以下几个核心组件: 1. **HttpSessionState**:这是ASP.NET中用于管理会话状态的对象,它存储和检索特定于用户会话的数据。每个用户的会话都有一个独立的SessionState实例,...
<title>session 实现原理 Cookie [] c = request.getCookies(); if(c==null){ out.println("sorry,cookie is null..."); }else{ for(int m =0;m;m++){ out.println(c[m].getName()+" "+c[m].getValue()...
以上就是使用JSP、Servlet和Session实现购物车功能的基本原理。在这个过程中,JSP和Servlet协同工作,Session起到了关键的会话管理作用,保证了用户在不同页面间操作的连贯性。在实际项目中,可能还需要结合数据库来...
Spring-Session 实现原理源码分析 Spring-Session 是 Spring旗下的一个项目,旨在解决 Session 管理问题。它可以轻松快捷地集成到我们的应用程序中,并提供了多种存储 Session 的方式。下面是 Spring-Session 的...
先说一下需求,我在做一个权限管理的时候,需要在点击某个模块时,Session中相应的改变模块代号,而实现这个操作的是一个a标签,当然我不知道 一个linkbutton是否可以同时将跳转页面和修改Session做了,个人感觉...
Springboot实现多服务器session共享 Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是...
在实际应用中,session常用于实现用户登录状态的保持,购物车功能,个性化推荐等。例如,当用户登录后,服务器会将用户信息存入session,后续请求中通过session ID就能识别用户身份,从而提供个性化的页面显示。对于...
接下来,我们将详细探讨Session的工作原理,如何利用Session实现用户登录,以及在购物车场景中的应用。 1. Session的工作原理: Session是基于HTTP协议无状态特性的一种补充机制。当用户访问服务器时,服务器会为...
本篇文章将深入探讨如何利用Redis实现Session共享,同时结合Nginx的负载均衡策略,以及Spring Boot的应用框架,构建一个高效、可靠的分布式系统。 一、Session共享的挑战与解决方案 在传统的单体应用中,Session...
本资源将介绍如何利用Session来实现一个购物车功能,特别地,这个购物车是通过链表结构来管理和维护商品信息。 购物车系统是电商网站的核心部分,它允许用户添加、删除和修改选购的商品。在ASP.NET中,由于HTTP协议...
本文将深入探讨SESSION购物车的概念、工作原理以及在实际应用中的重要性。 SESSION是一种服务器端存储用户状态的方法,当用户访问网站并登录或添加商品到购物车时,服务器会为该用户创建一个唯一的SESSION ID,并将...
本篇将详细解释Session的工作原理、配置及其实现用户自动登录的机制。 **一、Session概述** Session是HTTP协议无状态特性的补充,因为在HTTP协议中,每次请求都是独立的,服务器无法识别客户端的连续请求是否来自...
本文将深入探讨如何利用ZooKeeper实现分布式Session,并通过分析提供的"基于ZooKeeper的分布式Session实现.doc"文档,解析其实现原理与步骤。 首先,理解ZooKeeper的基本概念至关重要。ZooKeeper是一个高可用、高...
Session的工作原理是:当用户访问网站并登录后,服务器会为该用户创建一个唯一的Session ID,并将其存储在服务器端。这个Session ID随后会被发送到客户端(通常是通过Cookie),客户端在后续的每次请求时都会携带这...
Session 实现购物车 Session 实现购物车是指通过使用 Session 和 Hashtable 来实现购物车的添加、修改和删除操作。下面是对该技术的解释和知识点总结: 购物车原理 购物车的原理是通过使用 Hashtable 和 Session ...
虽然这个实现方式简化了许多实际项目中的复杂性,但它为初学者提供了一个了解`Session`工作原理和实现基本购物车功能的良好起点。在实际开发中,通常会结合数据库存储购物车信息,以支持更多功能,如持久化购物车、...
"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...