`
$会飞的鱼$
  • 浏览: 25579 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

Servlet中session用法小析:

阅读更多
一、什么是session:[size=medium]
      在谈session之前,我们要首先知道,由于HTTP协议本身是无状态的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要记录彼此过去的行为,每一次请求之间都是独立的,一次请求完成之后两者的连接就会断开。
      但是随着对WEB功能要求的不断提高,我们经常需要按需生成一些动态信息,就好比给有线电视添加一些互动点播一样,从而会使WEB的功能更加的人性化。这时候我们就需要一种机制来记录之前一段时间内的服务器和客户机之间的联系。这就是session机制。

有一个比较经典的比方可以帮我们更好的理解session机制:
      一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限(在servlet中这个有效期默认是30分钟)。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
      显然,我们常用的session就是在2、3两种方法中任选其一。

二、session机制的实现:
      session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
      当程序需要为某个客户端的请求创建一个session的时候,

第一步:
      服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,
此时就是两种可能,客户机有session id或者没有session id

第二步:
      如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个)
      如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id
(session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。)

三、保存session id 的方法
一)、cookie:
二)、URL重写:
cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics