cookie和session

鉴于HTTP是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来,即无法实现管理状态。因此即使当前用户下一次继续访问,也无法区分与其他的用户。于是使用cookie和session。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。

1.cookie是服务器在本地机器上存储的小段文本并随着每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。客户端请求服务器,如果服务器需要记录该用户状态,就是用response向客户端浏览器颁发一个cookie,客户端浏览器会把cookie保存起来,当浏览器再请求该网站时,浏览器把请求的网址连通该cookie一同提交给服务器,服务器检查该cookie,以此来辨认用户状态。

2.cookie主要内容包括:名字,值,过期时间,路径和域

  • 名字:该cookie的名称,cookie一旦创建,名称就不能更改
  • :该cookie的值,如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
  • 过期时间: 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效,按照设置的时间存储在硬盘上,过期后自动清除。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,存储在内存当中,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1
    Cookie cookie = new Cookie(“username”,”helloweenvsfei”); //新建cookie
    cookie.setMaxAge(Integer.MAX_VALUE); //设置cookie过期时间
    response.addCookie(cookie); // 输出到客户端
  • 路径:path属性决定允许访问Cookie的路径,页面只能获取它属于的Path的Cookie
    cookie.setPath(“/session/”); //只允许/session/下的程序使用该cookie
  • 域名:Cookie具有不可跨域名性,cookie在客户端是由浏览器来管理的,域名不同就不能操作同一个cookie(域名要严格相同).域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。这是由Cookie的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的Cookie。
    如果同一个一级域名下的两个二级域名想要访问同一个cookie,则需要设置domain跨域cookie.setDomain(“.baidu.com”); // 设置域名

session

1.Web应用程序中经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单和安全,相应的也增加了服务器的存储压力。session保存在服务器上,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了

2.Session在用户第一次访问服务器的时候自动创建,Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session

3.session的有效期;为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。

4.sessionid:HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。该Cookie为服务器自动生成的,它的maxAge属性一般为–1,为临时cookie,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。

5.URL地址重写:URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。
eg:
href=”<%=response.encodeURL(“index.jsp?c=1&wd=Java”) %>”

HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

href=”index.jsp;jsessionid=0CCD096E7F8D97B0BE608AFDC3E1931E?c=1&wd=Java”

用户单击这个链接的时候会把Session的id通过URL提交到服务器上,服务器通过解析URL地址获得Session的id。

6.禁用cookie:由于大部分的手机浏览器都不支持Cookie,那禁止Session使用Cookie,统一使用URL地址重写会更好一些 。 cookies=”false”

cookie和session的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值