会话对象之Cookie一篇搞定

1、会话对象的简述

用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。在会话对象过程中,存在两个重要的技术:

  1. Cookie
    Cookie翻译成中文是小甜点,小零食的意思,存在于客户端,其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来后,当下一次再访问服务器时把Cookie再发送给服务器。
  2. Session
    Session是存在于服务器,服务器内存在一个session池,里面存放了sessionID,在运行时可以为每一个用户的浏览器创建一个其独享的session对象(sessionId),是域对象之一,它的范围是在一个会话范围内有效。

2、Cookie概述

  1. Cookie作用
    Cookie是存在于客户端,是服务器保存在客户端的信息,在客户端下次请求是会把Cookie返回服务器,这样服务器可以根据传回的Cookie识别客户端,Cookie作用很大,但是再大也离不开“跟踪客户端状态”这句话。

3、Cookie示例

3.1.Cookie保存到客户端

将Cookie保存在客户端是response对象,属于响应工作,由于Cookie属于HTTP协议的内容,所以保存Cookie的方法是属于HttpServletResponse类。
1.void addCookie(Cookie c)
添加Cookie对象到当前response对象中,这个方法可以被调用多次,从而完成添加多个Cookie对象到response中。

Cookie cookie = new Cookie("username", "txjava");
response.addCookie(cookie);

通过浏览器的开发者工具我们可以看到,该请求的响应头中被添加了Set-Cookie的值:
在这里插入图片描述

3.2.服务器端读取Cookie

存储Cookie和读取Cookie比较

存储 读取
addCookie() getCookie()
response request
HttpServletResponse HttpServletRequest

假如览器保存了Cookie,那么会在下一次请求时把Cookie放到请求头中发送给服务器,这时服务器需要在请求中读取Cookie。既然是在请求中读取,那么当然是使用request对象来读取了。
HttpServletRequest:Cookie[] getCookies()

Cookie[] cookies = request.getCookies();
if(cookies != null){
    for(Cookie cookie : cookies){
        System.out.println(cookie.getName() +":"+ cookie.getValue());
    }
}

4、Cookie生命周期

Cookie会在客户端存活多久呢?这就是Cookie的生命周期。
默认情况下,Cookie只在浏览器的内存中存活,也就是说,当你关闭浏览器后,Cookie就会消失!
==可以使用Cookie#setMaxAge(int expiry)来设置Cookie的存活时间。==例:
①cookie.setMaxAge(60*60):表示cookie对象可存活1小时。
②cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1(其实只要是负数都是一个意思),表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。

5、Cookie保存中文

Cookie中是不可以设置中文的,但可以使用URLEncodor.encode ()方法编码后在存放到Cookie中。在获取Cookie时,需要先使用URLDecoder.decode()方法解码,再使用。

添加cookie:

Cookie cookie1 = new Cookie("username", URLEncoder.encode(username,"UTF-8"));

读取cookie:

扫描二维码关注公众号,回复: 10301163 查看本文章
Cookie[] cookies = request.getCookies();
if(cookies != null){
    for(Cookie cookie : cookies){
        if(cookie.getName().equals("username"))
            username = URLDecoder.decode(cookie.getValue(),"UTF-8");
        if(cookie.getName().equals("password"))
            password = cookie.getValue();
    }
}

6、Cookie的禁用

默认情况下浏览器的cookie是被启用的,但是其实我们是可以手动的禁用cookie的,强烈不建议禁用cookie;
Cookie一旦被禁用掉绝大多数互联网的网站都无法登录,这个跟我们后续要讲解的session有关。
那么我们如何通过程序来通过程序判断用户的浏览器上的cookie是否被禁用了呢,其实很简单,我们可以通过去刚刚添加的cookie,如果没有取到,说明cookie被禁用。

发布了2 篇原创文章 · 获赞 2 · 访问量 61

猜你喜欢

转载自blog.csdn.net/weixin_43296613/article/details/105166668