Cookie和Session的浅显理解

背景:

       正常情况下,浏览器客户端A与服务器B建立了联系以后,A向B提出多次请求,在没有使用cookie和session技术之前,这些请求在B中看来都是独立,没有关联的。具体点:例如打开淘宝网站,点击了一个商品(鞋子)添加到购物车里为a请求;点击了另一个商品(帽子)到购物车里为b请求;在没有使用这两个技术以前,那看不到这两个商品同时在购物车里的,因为服务器对每次请求都独立处理。

 

Cookie:

特点:

cookie 是由服务器产生,通过响应(respond.addCookie(cookies对象))给浏览器,且数据是储存在浏览器上的。因此,

1.cookie携带的数据量小,事实上每个cookie对象只存储字符窜类型的一对key-value。

2.cookie存储在浏览器上,安全性较低,通常如果安全性要求不高的才直接使用cookies

创建cookie时最基本需要设置几个特性:

  1)设置它的作用路径(  cookie.setPath("###/####")  ):也就是在服务端中哪些controller可以获取这个cookie,如果没有设置,也就是所有的controller都可以获取这个cookie

  2)设置它的生命周期( cookie.setMaxAge(  ) ):如果没有设置cookie的生命周期,关闭浏览器,cookie数据就清除掉了

@RequestMapping(path = "/cookie/set",method = RequestMethod.GET)
@ResponseBody
public String setCookie(HttpServletResponse response){
    //创建cookie
    Cookie cookie = new Cookie ( "code", CommunityUtil.generateUUID () );
    //设置cookie生效范围
    cookie.setPath ( "/community/alpha" );
    //设置cookie生命周期
    cookie.setMaxAge ( 60*10 );
    //发送cookie
    response.addCookie ( cookie );
    return "set cookies";
}

服务端获取cookie:

当浏览器再次访问服务器时,cookies会跟随请求发回来,服务器可以通过以下方式获取cookie:

获取的方式一:可以将所有kookies获取回来进行遍历;

获取方式二:使用注解@CookieValue (“cookie的key”) 获取指定的cookie

@RequestMapping(path = "/cookie/get", method = RequestMethod.GET)
@ResponseBody
public String getCookies(@CookieValue("code") String code){
    System.out.println ( code );
    return"getCookies";
}

 

Session:

特点:

session也是服务器端产生的,依赖在cookie基础上,但是数据是存储在服务器。session可以储存多条数据,而且数据类型不限定。

为什么依赖在cookies上:

因为session只储存在服务器中,当浏览器A访问服务器时,服务器生成Session1,服务器响应给浏览器时给他带上与Sesson1唯一对应的Cookie1,当浏览器再次访问服务器时,通过Cookie1可以找到原来的Session1。

创建Session:

定义Session对象:HttpSession  session;

往session对象里添加内容:session.setAttribute (  xxx ,  xxx )

上面没有设置 setMaxAge最大时间,即数据是存储在内存上的,一旦关闭浏览器,这个session对象就会被清除掉。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值