对java中的cookie、session理解与使用

在了解cookie和session之前,先理解下"状态管理"的定义:

  1. 什么是状态管理?
    将浏览器与web服务器之间多次交互当做一个整体来看待(即为了完成某个业务,需要多次交互,比如购物),并且将多次交互所涉及的数据(即状态)保存下来。
  2. 如何进行状态管理
    客户端:利用cookie技术进行管理
    服务端:利用session技术进行管理
    下面开始进入正题,简单介绍下java中的cookie和Session:

一、Cookie

  1. 什么是cookie?
     服务器临时存放在浏览器的少量数据
  2. cookie的工作原理?
    浏览器访问服务器时,服务器将少量数据以set-cookie消息头的方式发送给浏览器;浏览器会将这些数据临时保存下来,当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。
  3. 如何创建一个cookie?
    Cookie c = new Cookie(String name,String value); name为cookie的名称,value为cookie的值
    response.addCookie©; 需要将生成的cookie添加到HttpServletResponse的对象中才能起作用
  4. 如何获取Cookie?
    Cookie[] arr = request.getCookies(); 当不存在cookie的时候此方法会返回null值
    arr[i].getName(); 获取cookie的名称
    arr[i].getValue();  获取cookie的值
  5. cookie的生存时间?
    默认情况下,浏览器会将cookie保存在内存里面,浏览器不关闭,cookie一直在),可以调用 cookie.setMaxAge(int seconds)方法来设置cookie的生存时间。
    注意:
    a.单位是秒
    b.当 seconds > 0,浏览器会将cookie保存在硬盘上,超过指定的时间,浏览器会销毁该cookie。
    c.当 seconds < 0,保存在内存里面,浏览器关闭后cookie失效
    d.当 seconds = 0,浏览器会立即删除该cookie。
    比如,要删除一个名称为"cat"的cookie时:
   Cookie c = new Cookie("cat","");  // cookie不能实际上通过方法删除,通过重新创建一个同名的cookie
   c.setMaxAge(0);	// 设置生存时间为 0
   response.addCookie(c);	// 响应给浏览器后,因为设置的生存时间为0,所以浏览器会立刻清除该cookie
  1. cookie的编码问题?
    这个地方我在做项目中的用户退出登录时坑了我好久,由于没有对cookie进行编码的原因,当存入中文信息到cookie的value时会产生乱码。
    cookie只能保存合法的ascii字符。中文显示不属于ascii字符,需要将中文进行编码处理(也就是说,将中文转换成相应的ascii字符串的形式)。
      String URLEncoder.encode(String str,String charset)
      String URLDecoder.decode(String str,String charset)
    注:保存cookie时,尽量都编码处理。
  2. cookie的路径问题?
    a.什么是cookie的路径问题?
    浏览器访问服务器上的某个地址时,会比较该地址是否与cookie的路径匹配,只有匹配的cookie才会被发送。
    匹配规则:要访问的地址(路径)必须等于cookie的路径或者是其子路径。
    b.默认路径
    默认路径等于添加该cookie的组件的路径。
    比如: /servlet-day07-2/app01/addCookie.jsp添加了一个cookie,则该cookie默认的路径是"/servlet-day07-2/app01"
    c.如何修改cookie的路径?
    cookie.setPath(String path);
  3. cookie的缺点?
    a. cookie是可以被用户禁止的。
    b. cookie只能保存少量的数据。(大约是4k左右)
    c. 浏览器通常只允许保存几百个cookie。
    d. cookie不安全。(如果需要将敏感数据,比如帐号密码以cookie的方式保存在浏览器端,一定需要加密)。

二、Session(会话)

  1. 什么是session?
    服务段为保存状态而创建的一个特殊对象
  2. session的工作原理?
    浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将这个sessionId以cookie的形式发送给浏览器,浏览器会保存下来。当浏览器再次访问服务器时,会将sessionId以cookie的形式发发送给服务器,服务器会依据sessionId找到对应的session对象。
  3. 如何创建一个session对象?

方法一:HttpSession s = request.getSession(boolean flag)

  • flag==true 先查看请求当中是否有sessionId,如果没有,则创建session对象。如果有sessionId,则依据sessionId去查找对应的session对象,找到了,则返回;如果找不到,则创建一个新的session对象。
  • flag==false:先查看请求当中是否有sessionId,如果没有,会返回null。如果有sessionId,则依据sessionId去查找对应的session对象,找到了,则返回;如果找不到,返回null。

方法二:HttpSession s = request.getSession(); 和flag==true一致

  1. session如何绑定数据?
    绑订数据:setAttribute(String name,Object obj)
    依据绑订名获得绑订值:Object getAttribute(String name)
    解除绑订:removeAttribute(String name)
    删除session:session.invalidate()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值