Cookie与Session详解

什么是Cookie

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问,Cookie 数据存放在浏览器端(客户端)

官方定义:

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。

创建Cookie

1.创建Cookie

Cookie cookie = new Cookie("key","value");

2.使用response响应Cookie给客户端(浏览器)

response.addCookie(cookie);

3.使用response响应Cookie给客户端(浏览器)

7cb7584769fd4767a8d7a00d74c67075.png

获取cookie

 给用户生成cookie

@WebServlet("/addCookieServlet")
public class AddCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("mayikt", "yushengjun");
        resp.addCookie(cookie);
    }
}

获取客户端的所有Cookie,使用request对象

@WebServlet("/getCookieServlet")
public class GetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for(int i=0;i<cookies.length;i++){
            System.out.println(cookies[i].getName() +","+cookies[i].getValue());
        }
    }
}

在没有清理浏览器缓存的情况下?请问重启tomcat服务器?cookie数据会丢失吗?

不会的,因为cookie是存储在用户的身上,并不在服务器上,当清理了该浏览器缓存时,cookie的数据也会被清楚

Cookie的原理解析

Cookie实现是基于HTTP协议的

1.响应头:set—cookie

客户端(浏览器端)发送请求达到服务器端,服务器端会创建cookie,会将该cookie数据

返回给客户端,在响应头中设置 set—cookie value cookie数据。

b8aab5825db548e0a1ac5db064543036.png

 

2.请求头:cookie 

同一个浏览器发送请求时,在请求中设置该cookie数据 存放在请求头中。

Cookie过期时间

setMaxAge(int seconds):设置Cookie存活时间

1.正数:将Cookie写入浏览器所在的电脑硬盘,持久化存储,到期自动删除 

2.负数:默认值,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁。

3.零:删除对应Cookie

session使用

1.服务器端会话跟踪技术:将数据保存在服务器端

底层基于cookie实现封装的

2.常用的API:

  • void session.setAttribute(k,v) session存入值 key=name,value 'yushengjun'
  • Object session.getAttribute(k) 获取到session中的值
  • void removeAttribute(k) 删除我们的session 

session原理

1.当我们客户端发送请求达到服务器端时创建session,会得到一个sessionid,在将该

sessionid 响应在响应头

2.客户端(浏览器)接受响应头中的sessionid ,会将该sessionid的值 存放在浏览器中。

session本质上就是基于cookie实现封装的。

3.使用同一个浏览器发送请求时,访问通一个服务器端,会在请求头中设定该sessionid 的值,服务器端就会从请求头中获取到该sessionid 查找对应session。

session 数据存放在服务器端 cookie将数据存放在本地。

006d09246fa54fd38d72c81378ba7e5f.png

session细节

1.当客户端关闭后,服务器不关闭的话,获取到的session是否是同一个。因为客户端关闭后,cookie对象被销毁,客户端请求服务器会创建新的session。如果需要相同,可以设置cookie的最大存活时间,让cookie持久化保存两次获取Session是否为同一个

2.在默认情况下,不是同一个。如果需要两个Session相同,则可以创建一个Cookie对象,key为:JSESSIONID,设置一下最大存活时间,让Cookie持久化保存Session的ID,就可以实现客户端关闭,两次获取Session就是同一个。

Cookie c = new Cookie("JSESSIONID",session.getId());
        c.setMaxAge(60*60); //1个小时有效期
        response.addCookie(c);

1. 客户端不关闭,服务器关闭后的话,两次获取的Session是同一个吗?

        不是同一个,但是为了确保数据不丢失,因为同样服务器关闭后session对象会被销毁 ,如果想确保数据不丢失,可以使session钝化,即在服务器正常关闭之前,将session对象序列化到硬盘上。下次在服务器启动后,将session文件反序列化转化为内存中的session对象即可。

2.tomcat自动完成以下工作:

        1.session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上。

        2.session的活化: 在服务器启动后,将session文件转化为内存中的session对象即可。

3.session什么时候被销毁?

        1.服务器关闭;

        2.session对象调用invalidate() ;

        3.session默认失效时间 30分钟

session与cookie区别

1.session用于存储一次会话的多次请求的数据,存在服务器端;

2.session可以存储任意类型,任意大小的数据。

session与Cookie的区别:

        1.session存储数据在服务器端,Cookie在客户端;

        2.session没有数据大小限制,Cookie有数据大小限制;

        3.session数据安全,Cookie相对于不安全

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TC_FANCY

你的支持是我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值