Cookie和Session技术

目录

一、会话技术

1、会话的建立和作用

2、会话技术分为Cookie和Session

二、Cookie

1、Cookie的定义

2、Cookie的特点

3、服务器怎么将Cookie设置到浏览器客户端

3、服务器怎么接收客户端携带的Cookie

4、cookie的有效时间

三、Session

1、session的定义

2、怎样获得Session对象

3、怎样向Session中存取数据

4、Session对象的生命周期

5、Session的范围

四、Cookie和Session的联系和区别

1、联系

2、区别


一、会话技术

在生活中我们和别人的聊天其实就算是会话,软件中的会话也类似,就像是我们要访问数据库就要和数据库保持连接(connection),这里的连接就是一个会话。

1、会话的建立和作用

浏览器第一次给服务器资源发送请求时,会话建立,直到有一方断开为止。会话技术就是用来记录这次会话中客户端的状态与数据的。

2、会话技术分为Cookie和Session

二、Cookie

1、Cookie的定义

数据放在浏览器端的技术叫Cookie技术。

2、Cookie的特点

数据存储在客户端本地,减少了服务器端的存储的压力,但是安全性不好,客户端可以直接清除Cookie。

3、服务器怎么将Cookie设置到浏览器客户端

(1)创建Cookie

Cookie cookie = new Cookie(cookieName, cookieValue);

(2)将cookie通过response相应返回给浏览器

(3)代码实现

@WebServlet("/setCookie")
public class SetCookieServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("SetCookieServlet.service");
        Cookie cookie = new Cookie("goods", "Honor");
        resp.addCookie(cookie);
    }
}

通过代码设置好cookie后,我们可以在浏览器端访问这个servlet,并观察cookie的值,可以看到第一条就是我们设置的值。

3、服务器怎么接收客户端携带的Cookie

cookie信息是以请求头的方式发送到服务器端的

(1)通过request获得所有的Cookie,得到的时Cookie数组

Cookie[] cookies = request.getCookies();

(2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

(3)代码实现

@WebServlet("/getCookie")
public class GetCookieServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GetCookieServlet.service");
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            System.out.println("name: " + cookie.getName() + ", value: " + cookie.getValue());
        }
    }
}

4、Cookie的有效时间

(1) 默认情况下,当浏览器关闭后,Cookie数据就会被销毁

(2)持久化存储,自己设置cookie的有效时间

cookie.setMaxAge(10 * 60); //保存10分钟,设置Cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该Cookie信息,这里就算是没有关闭浏览器过了有效时间之后浏览器也会自动删除cookie信息

(3)cookie.setMaxAge(10 * 60)方法的参数的含义:

方法的参数是一个以秒为单位的整数,指定cookie的最大年龄:

  • 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie的存活时间,时间到后,cookie文件自动失效。
  • 负数:浏览器关闭的时候Cookie就丢失,默认值就是负数
  • 零:表示删除同名的Cookie数据。

(4)删除客户端的 Cookie:  如果想删除客户端已经存在的Cookie信息,就是将持久化时间设置为0即可。

三、Session

1、session的定义

Session是服务器端的会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。

2、怎样获得Session对象

客户端需要每次都携带一个标识的ID:JSESSIONID去服务器寻找自己的内存空间(也就是对应的Session)。所以说Session技术是基于Cookie技术的,Session需要借助于Cookie存储客户的唯一标识JSESSIONID,以便客户能找到自己的Session。

有两种getSession方法:

HttpSession session = request.getSession(false);

HttpSession session = request.getSession(); //参数默认情况下为true:request.getSession(true);

(1)request.getSession(false)

得到session对象,原来有Session就直接返回,没有就返回null。

(2)request.getSession(true) 等价于 request.getSession()

创建或得到session对象,原来有Session就直接返回,没有就自动创建新的session对象,然后再返回新创建的这个Session对象。

3、怎样向Session中存取数据

session对象具有如下三个方法:

(1)session.setAttribute(String name,Object obj); //向Session里面存入数据,参数分别为:

数据的名称,数据的值;

(2)session.getAttribute(String name); //通过数据的名称拿到Session里面的数据的值

(3)session.removeAttribute(String name); //通过数据的名称移除Session里面的数据

4、Session对象的生命周期

(1)创建

在第一次执行request.getSession()时创建Session对象

(2)销毁

  • 服务器关闭时销毁
  • 手动销毁session (注销或者退出)//session.invalidate();
  • session过期/失效(默认30分钟)时销毁

这里默认的30时分钟是从不操作服务器端的资源开始计时的,可以在项目的web.xml中进行配置

Session的失效时间。

5、Session的范围

(1)当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;

(2)当使用不同的浏览器时,即使发送相同的请求,也是不同的session;

(3)当把同一个浏览器关闭,再重新打开,即使发送相同的请求时,也是不同的session.

四、Cookie和Session的联系和区别

Session技术是基于Cookie技术的,客户无法直接找到属于自己的Session,需要借助于Cookie来存储客户的唯一标识JSESSIONID,以便客户能找到自己的Session。

1、联系

以加入购物车的栗子来说明Cookie和Session之间的联系:

图中标注的数字如下:

(1)客户端发出张三申请加入购物车的请求,并且携带商品信息

(2)(3)服务器端收到请求把数据保存到张三的Session里面,并给张三返回一个cookie信息,里面保存了SessionID:001

(4)客户端发出张三申请结算的请求并携带者SessionID:001

(5)客户端收到请求之后,根据cookie里面的SessionID:001找到张三的商品信息并进行结算。

2、区别

  • Session数据存储在服务器端,Cookie在客户端
  • Session没有数据大小限制,Cookie有
  • Session数据安全,Cookie相对于不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值