cookie和session总结

  • Cookie

服务端给客户端的数据,存储于客户端(浏览器)。由于是保存在客户端上的,所以存在安全问题,并且cookie是由个数和大小限制的(4KB),所以一般cookie用来存储一些比较小且安全性要求不高的数据,而且一般数据都会进行加密。

 

1、创建cookie

Cookie c = new Cookie(String name,String value);

name为cookie的名称,value为cookie的值

 

2、添加cookie到response中

 response.addCookie(c);

需要将生成的cookie添加到HttpServletResponse的对象中才能起作用

 

  1. 获取cookie

Cookie[]  arr = request.getCookies();  当不存在cookie的时候此方法会返回null值

arr[i].getName();    获取cookie的名称

arr[i].getValue();  获取cookie的值

 

  1. 设置cookie的生存时间

cookie.setMaxAge(int expiry);

expiry的取值有中情况

expiry> 0,浏览器会将cookie保存在硬盘上,超过指定的时间(单位是秒),浏览器会销毁该cookie。

当 seconds < 0,保存在内存里面

当 seconds = 0,浏览器会立即删除该cookie。

注意:对cookie做出的设置做出修改后记得要加上这句代码,否则没有任何效果。

response.addCookie(Cookie arg0);

 

  1. cookie的编码问题

Cookie保存中文会乱码,所有建议通过使用编码格式(例如:UTF-8)进行编写后然后在存储到cookie中,使用该cookie 时在获取出来然后进行解码操作。

String URLEncoder.encode(String str,String charset)

String URLDecoder.decode(String str,String charset)

 

  • Session

在学习jsp的时候我们知道了session是jsp的内置对象,其作用域是在整个会话期间。

我们在之前Cookie的例子会发现cookie中有JSESSIONID这个字段,实际上首次请求网页时在请求头里是没有这个字段的,因为我们并没有创建session,当我们调用request.getSession()时,此时会创建一个session,并且将sessionId保存到cookie中,然后回写给response,所以我们发现首次创建session时的响应头有JSESSIONID这个字段,后面的request默认都会带上JSESSIONID这个字段,而response中则不会再有该字段了。而服务器就能够根据JSESSIONID这个字段值查找对应的session。

  1. 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的常用方法

HttpSession session = request.getSession();//获取session,没有则创建

session.getId();//获取

sessionId session.getAttribute("key");//获取存储的某个值

session.setAttribute("key","value");//存储数据,value是object类型

session.getCreationTime();//获取session创建的时间

session.removeAttribute("key");//移除某个数据

session.invalidate();//重置session,使session失效

session.setMaxInactiveInterval(1*60*60);//设置会话的超时时间(单位:秒),默认30分钟 session.getLastAccessedTime();//最后一次修改session的时间

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值