Cookie和Session机制

摘自http://blog.csdn.net/fangaoxin/article/details/6952954

web应用程序基于HTTP协议传输数据,而HTTP协议是无状态协议,当一次数据交换完成后,客户端和服务器端会关闭连接,当再次交换数据时需重建连接,因此无法从连接上跟踪会话。


Cookie实质是存储在客户端的一段小文本信息。当客户端向服务器端发起请求,如服务器端需要记录用户状态,则通过response设置Cookie。客户端会保存Cookie,当再次发起请求时,把请求网址连同Cookie一起提交给服务器。


Java中,将Cookie封装成javax.servlet.http.Cookie类,通过操作Cookie类对象对客户端cookie进行操作。通过request.getCookie()获取客户端提交的所有cookie,以Cookie[]数组的形式返回。通过response.addCookie(Cookie cookie)设置Cookie。Cookie对象使用key-value的形式保存保存用户状态。一个Cookie对象保存一个属性对,一个request或者response操纵多个Cookie对象。


Cookie的maxAge决定这Cookie的有效期,可通过getMaxAge()和setMaxAge(int maxAge)来对maxAge进行读写操作。当maxAge为正数,表示Cookie在maxAge秒后失效。当maxAge为负数,表示仅在当前窗口或其子窗口有效,关闭则失效(临时Cookie,不会被持久化,不会写入Cookie文件中。当maxAge为0,表示删除Cookie。


Cookie的修改,需新建一个同名的Cookie,添加到response中覆盖原来的Cookie。注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。



Session是服务器端记录客户端状态的机制,增加了服务器端的存储压力。


Session对应javax.servlet.http.Session类,每一个用户对应一个Session对象,该用户的所有状态信息都存于Session中,当用户第一次访问是创建Session对象。Session也是一种key-value属性对,通过getAttribute(Stringkey)和setAttribute(String key,object value)来读写用户状态信息。通过request.getSession()来获取session。


Session的超时时间为maxInactiveInterval属性,通过getMaxInactiveInterval(),和setMaxInactiveInterval()来设置和修改。调用Session的invalidate()方法来使session失效。


Session不能依据HTTP的链接来判断是否为同一用户。服务器端需向客户端发送存有sessionid的名为JSESSION的Cookie。Session依据这个Cookie来识别是否为同一用户。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值