HTTP协议是无状态的协议,那么我们应该如何去理解呢?
无状态协议是指协议队伍处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 Http协议不像建立了socket连接的两个终端,双方是可以互相通信的,http的客户端只能通过请求服务器来获取相关内容或文件信息。
http协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。
客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。
有了Cookie和Session我们又能做什么?
先来说说Cookie:
Cookie的产生
Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。
Cookie是由服务器端生成,发送给User-Agent(一般是web浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用Cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入Sessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。
Cookie用途
Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
Cookie生存周期
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭页面时,就马上清除Cookie,不会记录用户信息,更加安全。
我们可以通过 http://g21121.iteye.com/blog/1537422 这篇文章了解java对于Cookie的一些操作。
再来谈谈Session:
Session:在计算机中,尤其是在网络应用中,称为“会话”。
Session简介
Session直接翻译成中文比较困难,一般都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间。
具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。
何时产生Session,怎样产生Session?
当客户端访问服务器时,服务器根据需求设置Session,将会话信息保存在服务器上,同时将标示Session的SessionId传递给客户端浏览器,
浏览器将这个SessionId保存在内存中,我们称之为无过期时间的Cookie。浏览器关闭后,这个Cookie就会被清掉,它不会存在于用户的Cookie临时文件。
以后浏览器每次请求都会额外加上这个参数值,服务器会根据这个SessionId,就能取得客户端的数据信息。
如果客户端浏览器意外关闭,服务器保存的Session数据不是立即释放,此时数据还会存在,只要我们知道那个SessionId,就可以继续通过请求获得此Session的信息,因为此时后台的Session还存在,当然我们可以设置一个Session超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应SessionId的Session信息。
在tomcat中我们可以在web.xml中加入如下代码实现Session超时:
<!-- Session 超时时间 60代表分钟--> <Session-config> <Session-timeout>60</Session-timeout> </Session-config>
综上所述我们可以理解Session的建立流程是:
当用浏览器登录到某网站服务器时,先找对应的Cookie文件,当首次访问是当然没有Cookie文件,所以在请求头部中没有Cookie的内容,即在请求头部中没有类似Cookie: JSESSIONID=XXXXXXXXXXXXXXX的内容,这时当请求到达服务器后,服务器看请求头中没有JSESSIONID值,于是生成一个Session对象,并由某种算法产生一个值赋给这个Session的id,并将SessionId,和Session对象放入HashMap中,然后将这个SessionId发回以客户端,即在响应的头部有一行:Set-Cookie:JSESSIONID=XXXXXXXXXXXXXX,浏览器解析后会将在JSESSIONID和值记录到Cookie中。
当用浏览器再次请求此网站的另一页面时,浏览器检查看有没有Cookie,这时有Cookie(前提是Cookie没有过期),会自动的把Cookie的内容附加到请求头中,即在请求头附加了一行:Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXX,服务器接收到请求后会根据JSESSIONID的值知道SessionId的值,在tomcat中两个值是一样的,然后你可根据这个SessionId找到对应的Session,可由Session中登录后设定的某些值是否为空,来判断此用户是否登录。
当用户安全登出后(调用session.invalidate()),服务器会将Session销毁,并生成一个新的JSESSIONID发回用客户端,浏览器接收响应后,会将Cookie中的JSESSIONID换成新值,当用户再次访问此服务器时,会在请求中自动的加入新的JSESSIONID的值发到服务器,这时服务器根据JSESSIONID找不对应的Session了,因此就可知道是一次新的会话,服务器会生成一个Session对象,并将客户端发过来的JSESSION的值赋给这个Session的id。
如果客户端禁用了Cookie那么服务器可就无法将session内容与客户端对应上了。
Session以tomcat为例默认是保存在内存中的,但是我们可以通过配置将Session持久化,保存在硬盘文件中,这里我就不介绍了,感兴趣的童鞋可以自己百度。
相关推荐
HTTP Session 是Web开发中一种重要的技术,用于在客户端和服务器之间维持状态,尤其是在无状态的HTTP协议下。本文将深入探讨HTTP Session的原理及其在实际应用中的作用。 首先,理解"session"一词的含义至关重要。...
### Session的工作原理与概念详解 #### 一、Session的基本概念 在计算机科学中,特别是网络编程领域,“**Session**”一词被广泛使用,并且在不同的上下文中具有不同的含义。通常,Session指的是客户端与服务器...
ASP.NET中的Session是用于在无状态HTTP协议下保持用户会话状态的一种机制。HTTP协议的无状态特性意味着每次客户端向服务器发送请求时,服务器不会记住之前的交互信息。为了解决这个问题,Session应运而生,它允许...
Session和Cookie是两种在Web开发中常见的用户状态管理机制,它们主要用于在HTTP协议无状态的特性下跟踪用户状态。理解它们的原理对于编写高效的Web应用至关重要。 **Cookie原理** Cookie是由服务器端创建,并通过...
HTTP作为一种无状态协议,在完成一次客户端与服务器间的信息交换后即断开连接,这给跨页面的数据传递带来了挑战。为了解决这个问题,Web开发中引入了多种解决方案,其中最为人熟知的是使用匿名字段、URL重写、...
由于HTTP协议本身是无状态的(即服务器无法记住客户端之间请求的状态信息),因此需要一种方法来保存用户的特定信息以便在多个页面请求间共享。Session就是为了解决这一问题而设计的。 当用户首次访问网站时,...
传统的HTTP协议是无状态的,这意味着每一次客户端发起的请求都是独立的,服务器无法直接识别出请求来自哪个特定的用户。为了克服这一限制,开发者引入了多种技术来维护用户的会话状态,其中最常用的技术包括Cookie和...
Session机制的出现,主要是为了解决HTTP协议的无状态性问题。HTTP协议本身是无状态的,这意味着每一次客户端的请求都是独立的,服务器不会保存有关客户端请求的状态信息。这种设计在很多情况下是有利的,因为它简化...
Session是HTTP协议无状态特性下的解决方案,用于在多个请求之间保持用户的状态信息。在购物车应用中,每个用户可能有自己的购物车,这些信息需要在用户浏览不同的页面时保持一致。我们可以为每个用户创建一个唯一的...
HTTP协议,作为互联网上应用最为广泛的通信协议之一,本质上是无状态的,意味着每次请求和响应都是独立的,不保留历史信息。这种设计简化了服务器的实现,但也带来了挑战,特别是在需要跨多个页面请求维护用户状态的...
- **HTTP协议的状态管理**:由于HTTP协议本身的无状态特性,为了实现状态管理,开发人员需要借助额外的技术手段。其中最常用的就是Cookie和Session。 #### 三、Session的实现机制 1. **Session的创建**:当用户...
它解决了HTTP协议无状态的问题,使得服务器能够识别和跟踪用户会话。Cookie本质上是文本信息,通常由服务器在响应中发送给客户端,客户端将其保存并在后续请求中发送回服务器。服务器通过检查接收到的Cookie来辨别...
在Web应用中,Session通常作为一种机制,用来在HTTP无状态的环境中保持用户状态,即维持会话的连续性。它不是特定的编程语言或框架的特性,而是一种普遍存在于Web开发中的解决方案。 为什么需要Session? HTTP协议...
Session是HTTP协议无状态特性的补充,因为在HTTP协议中,每次请求都是独立的,服务器无法识别客户端的连续请求是否来自同一用户。为了解决这个问题,服务器端创建了一个称为Session的数据结构,用于存储特定用户会话...
- **解决方案**:为了解决无状态协议与状态保持需求之间的矛盾,引入了`session`(会话)和`cookie`等机制,通过这些额外的技术手段来实现状态的维护。 #### Session如何工作 - **基本原理**:`session`通常依赖于...
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。于是需要引入一种机制,COOKIE于是就顺应而生。 Session是另一...
在HTTP协议无状态的特性下,Session扮演了关键角色,它允许服务器保存和识别不同请求之间的用户信息。 Session的工作原理是:当用户访问网站并登录后,服务器会为该用户创建一个唯一的Session ID,并将其存储在...
在Web开发中,Session是一种重要的机制,用于在客户端和服务器之间保持状态,尤其是在HTTP协议本身无状态的情况下。本文将深入探讨Session的工作原理,以及在Java Web应用程序中如何有效地利用和处理Session相关的...