session机制

http是一种无状态的协议,使用这种协议时,客户打开一个连接向服务器发送一个请求,服务器对请求进行处理并作出应答,然后本次连接断开,服务器不会在任何地方对客户信息进行记录,因此,当同一个客户在第二次向服务器发送请求时,服务器会把这请求当作一次新的请求,与前次的请求无关。对于简单的web应用,这很适合,因为每个请求的结果仅仅只是获取一些静态的资源或信息,服务器不必知道一系列请求是否来自同一客户,也不必知道,但对于现在的大多数web应用无状态就不能满足需求了。比如我们进入javaeye,想登陆进行会员操作,在登陆页面输入我们的用户名、密码,点击登陆,成功登陆的话页面跳转回到登陆前的页面或其他页面,如果此时是无状态的,在我们看见服务器说我们登陆成功时,我们已经处于未登陆状态,因为服务器没有记录我们登陆行为,我们向服务器发送的下一次请求与我们是否登陆也就没有任何关系,还好, session机制的引入解决了这一问题。

 

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当服务器要为某个客户创建一个session的时候,服务器会首先检测客户端的请求是否包含了一个session标识即session id,如果包含服务器则会将session检测出来并用于获取客户信息,如果未检测到则会为客户创建一个session并自动生成一个相应的id,该id能唯一的标识该session,并将session id包含在响应中返回给客户。

 

session最常借助cookie来保存session idcookie是一种由服务器发送给客户的片段信息,并在客户在向服务器发送请求时需包含它来标示自己,通过cookie,客户与服务器之间的通信就变为一种有状态的通信,它可以存储在用户游览器的内存中,并根据实际需要可保存在用户的硬盘上。在我们登陆javaeye时,我们可以选择“自动登录”,这样我们下一次在同一电脑上打开网页时,javaeye就能自动识别我们。Session机制可通过cookie来实现,但由于cookie的能够记录我们登陆网站的信息,某些用户会选择禁用cookie,在游览器的“Internet选项->隐私”中,我们可以更改对cookie一些限制,如果我们将隐私级别调至最高,意味着我们不允许任何服务器读取我们电脑上的cookie,也不接受任何服务器为我们创建的cookie,此时,我们登陆QQ邮箱时,我们会无法登陆,并在登陆页面上会提醒我们设置cookie。由于cookie可被禁用,因此需要有另外的方法使我们与服务器的通信仍处于有状态,URL重写就是这样一种技术。

 

URL重写是指将生成的session id直接保存在URL后,比如

http://www.xxxxx.com/xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764

    其中jsessionsession的名字,而后面那一串字符就为session id。另外还有一种表单隐藏字段技术,它将session id保存在html的隐藏表单中,但目前,该技术已经很少使用了。在前面所说的禁止cookie后无法登陆QQ邮箱是因为QQ邮箱的服务器并没有采用该技术,是否支持这些技术是由服务器端所决定的,如果服务器端未采用上述技术中任何一种,那么我们与该服务器的通信只能是无状态通信。

 

session通常被认为认为随我们开始访问某网页而开始,随关闭该网页而结束,实则不然,session只有在服务器调用

HttpSession

getSession(boolean create)

方法时,才会被创建。该方法可以返回一个HttpSessionjavasession),如果session不存在且createtrue时,session才会被创建。而我们关闭某网页时,游览器不会向相应的服务器发送一个消息告诉它我们不再访问该页面,也就是服务器器不知道我们何时结束访问,它会一直保存着session直到用户发送销毁session请求或内存溢出,因而session必须需要一个生命周期,当到了生命周期结束时,session就自动销毁。另外session常用cookie来实现,如果cookie被保存在我们的硬盘上,再下一次使用时,只要把原来的session id发送给服务器,服务器则能够再次识别用户!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值