数据人与超自然意识 发表于 2025-12-12 16:27:47

JavaWeb学习(2)(Cookie原理(超具体)、HTTP无状态)

目次
一、HTTP无状态。
(1)"记着我"?
(2)HTTP无状态。
(3)信息存储客户端中。如那边置处罚?
1、loaclStorage与sessionStorage。
2、Cookie。
二、Cookie。
(1)Cookie是什么?
(2)Cookie的特性。
1、Cookie构成。
2、Cookie的告急特性。
(3)Cookie的API。
1、创建Cookie。
2、发送Cookie。
3、获取Cookie值。
(4)Cookie的覆盖。
1、案例演示。
2、Cookie路径(path)。
3、Cookie覆盖。
(5)Cookie的生命周期。
1、什么是Cookie的生命?
2、Cookie殒命。
3、Cookie最大存活时间。

一、HTTP无状态。

   (1)"记着我"?



[*]通常,处于登录界面时,我们输入用户名与暗码点击"提交"前,会有一个“记着我”功能!当用户名、暗码验证乐成,欣赏器该怎样存储对应的信息(用户名、暗码等等)呢?
https://i-blog.csdnimg.cn/direct/925f96d4fc074829a47213ef2c7303ad.png


[*]是生存在服务器?还是生存在客户端中?
(2)HTTP无状态。



[*]HTTP协议是无状态的,这意味着服务器不会生存任何关于客户端哀求之间的信息。
[*]每次HTTP哀求都是独立的,服务器不会记着之前发生过的哀求。
[*]也就是:每个哀求都是独立的,服务器处理处罚完哀求后就会竣事会话,不会保存任何会话信息。
[*]为了办理无状态协议带来的题目,引入了Cookies和Session等技能来维持用户会话。Cookies是客户端的存储机制,用于生存状态信息;而Session则是服务器端的存储机制,用于跟踪用户状态。


[*]假如将“用户信息”存在在服务器中。那么就必要"东西"让服务器分辨当前是哪个用户访问,再给对应的用户信息。
[*]如许服务器的压力就会很大!以是应该是每个用户的"登录个人信息"存储在用户所安装的客户端欣赏器中,而不是存储在服务器。
[*]如许当用户A登录时,从用户A的客户端欣赏器拿到对应的信息。当用户B登录时,就从用户B客户端欣赏器拿到对应的信息。如许就有用的区分了每个客户端的信息。
(3)信息存储客户端中。如那边置处罚?



[*]基于客户端欣赏器的访问。怎样将数据生存在客户端欣赏器中?
[*]登录校验的逻辑代码是在服务器端运行的。只要登录乐成后,就会将(用户名、暗码)存储在到客户端欣赏器中。


[*]如下三个被赤色框选中的(客户端欣赏器中)都可以存储信息。
https://i-blog.csdnimg.cn/direct/1dc22df40630451abeb936b112c2ec7d.png
1、loaclStorage与sessionStorage。



[*]此中当地存储空间(loaclStorage)、会话存储(sessionStorage)空间:都是纯正的js技能。
[*]它们之间的区别:loaclStorage是全部用户都可以拿到信息。(数据在欣赏器关闭后仍可保存)而sessionStorage是在一次会话中有用。(与服务器一次通讯)
2、Cookie。



[*]既可以利用js利用,也可以利用Java举行利用!由于服务器端代码(/..xxServlet)也是Java语言写的,这就刚好可以利用这个"Cookie"。
[*]接下来就具体的先容Cookie!
二、Cookie。

   (1)Cookie是什么?



[*]"Cookie"翻译成中文:小甜点,小饼干的意思。
[*]在HTTP中它表现服务器发送给客户端欣赏器的小甜点。


[*]实在Cookie就是一个键和一个值(key/value)构成的,随着服务器端的相应发送给客户端欣赏器。
[*]注意:Cookie的存储的key/value都是String范例。域对象中存储的value是object范例。


[*]如下:Cookie是由服务器创建,然后通过相应发送给客户端的一个键值对。
[*]客户端会生存Cookie,并会标注出Cookie的泉源(哪个服务器的Cookie)。
[*]当客户端向服务器发出哀求时会把全部这个服务器Cookie包罗在哀求中发送给服务器,如许服务器就可以辨认客户端了!
https://i-blog.csdnimg.cn/direct/f13763c906904f7b8ec9d526d8641ad9.png
(2)Cookie的特性。

1、Cookie构成。



[*]Cookie通常包罗一个键(名称)、一个值,以及一些属性。(如有用期、路径、域和安全标志)
https://i-blog.csdnimg.cn/direct/a8837e6c5c604068b4215e501bdc8843.png


[*]可以看到键"user"——>值"lisi"、键"password"——>值"123456"。
[*]相应的服务器是本机:http://localhost:8080。
[*]路径:"/"。表现全部的哀求都可以拿到该Cookie。
https://i-blog.csdnimg.cn/direct/d63b27dbdeea4085a7c3ed51d6f6067d.png
2、Cookie的告急特性。



[*]Cookie的工作原理涉及到客户端(欣赏器)和服务器之间的交互。
[*]Cookie创建于服务器,生存于客户端欣赏器上。差别欣赏器之间Cookie无法共享,无法跨欣赏器。
[*]客户端欣赏器会把Cookie生存起来,当下一次再访问服务器时把Cookie再发送给服务器。
[*]Cookie本身是一种有用的技能,用于在客户端存储状态信息,但它也存在一些安全风险。在现实案例中,还必要对Cookie举行加密大概不存储敏感信息。(否则明文表现)
(3)Cookie的API。



[*]Cookie是一个类(class)。
https://i-blog.csdnimg.cn/direct/a9189066da044320978120438b0f179a.png
1、创建Cookie。



[*]通常都是利用:new 构造方法。
[*]构造方法只有一个:new Cookie(键名,键值)。
https://i-blog.csdnimg.cn/direct/8cad5b323655498396e1d5277f09013e.png


[*]案例演示。创建服务器:AServlet。创建两个Cookie(cookie1、cookie2)。并利用addCookie()方法发送到客户端对应的Cookie。假如不发送,客户端无法得到Cookie。
package com.fs.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @Title: AServlet
* @Author HeYouLong
* @Package com.fs.web
* @Date 2024/11/27 下午4:52
* @description: 测试类
*/
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //创建Cookie
      Cookie cookie1 = new Cookie("k1","v1000");
      Cookie cookie2 = new Cookie("k2","v2000");

      //发送Cookie
      resp.addCookie(cookie1);
      resp.addCookie(cookie2);
    }
}


[*]此时cookie1的k1与v1000、cookie2的k2与v2000都已经存储在客户端中。
https://i-blog.csdnimg.cn/direct/ecc0cb958dd64d1fb07bd5beb2dcd648.png
2、发送Cookie。



[*]服务器中调用方法:addCookie(Cookie对象)。
[*]验证:之后的哀求,客户端欣赏器会主动的携带Cookie通过哀求头发送给服务器。
[*]创建BServlet,内里只重写了doGet()方法。直接再次哀求访问BServlet。
package com.fs.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @Title: BServlet
* @Author HeYouLong
* @Package com.fs.web
* @Date 2024/11/27 下午8:18
* @description: 测试
*/
@WebServlet("/BServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
    }
}

[*]显然是主动的将Cookie发送给服务器了。
https://i-blog.csdnimg.cn/direct/733e85232f9b4e0080a29089aacf2e1e.png
https://i-blog.csdnimg.cn/direct/6e43574728d84ba38b87bf7c6e22705f.png
3、获取Cookie值。



[*]方法1。通过request.getHeader("Cookie")。不保举!
https://i-blog.csdnimg.cn/direct/4e2d5a1db8b24b2f91d2af4a5183163b.png


[*]方法2。request.getCookies()。如允许以拿到全部的Cookie。再通过循环遍历,拿取对应的键名的键值。先通过getName()拿到键名,再根据键名拿到值getValue()。
https://i-blog.csdnimg.cn/direct/4851c6f80540413b8bdcac6e445e0424.png
package com.fs.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @Title: BServlet
* @Author HeYouLong
* @Package com.fs.web
* @Date 2024/11/27 下午8:18
* @description: 测试
*/
@WebServlet("/BServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

      //获取指定Cookie
      Cookie[] cookies = req.getCookies();
      for (Cookie cookie : cookies) {
            String name = cookie.getName();
            if(name.equals("k1")){
                String value = cookie.getValue();
                System.out.println(name);
                System.out.println(value);
                break;
            }
      }
      /*String cookie = req.getHeader("Cookie");
      System.out.println(cookie);*/
    }
}


[*]乐成拿到键名"k1"对应的键值"v1000"。
https://i-blog.csdnimg.cn/direct/e9ab46bfc82d402aa0fbf98b4b93376a.png
(4)Cookie的覆盖。

1、案例演示。



[*]先访问/AServlet。再访问/user/AServlet。看看对应的Cookie。
[*]/AServlet。
https://i-blog.csdnimg.cn/direct/ab110f06505747ebadbe8b1f446f6903.png


[*]/user/AServlet。
https://i-blog.csdnimg.cn/direct/797c595a5c814ee98e12727a2d5a085d.png
2、Cookie路径(path)。



[*]可以通过设置Cookie的path来指定欣赏器,在访问什么样的路径时,包罗什么样的Cookie。
[*]假如Cookie的name(键名)与path(路径)一样,就会覆盖value(键值)。
[*]假如没有设置path:默认值,创建Cookie的资源(服务器)的上级路径!
[*]像访问资源(/user/BServlet)对应的path:"/user"。访问资源(/BServlet)对应的path:"/"。


[*]举例访问某个路径下的资源,能访问的对应Cookie。
https://i-blog.csdnimg.cn/direct/da7a9810ad124276975910e96b3a7baa.png
https://i-blog.csdnimg.cn/direct/4814a656a9dc4320876a65945905a82c.png
https://i-blog.csdnimg.cn/direct/0c89486af5a844d7b918943236cabeb9.png
https://i-blog.csdnimg.cn/direct/eb3abb0e22da413e872c6b0bb44af926.png
https://i-blog.csdnimg.cn/direct/fd285b937a43456ab0e16e9036849e71.png


[*]创建Cookie时,主动设置Cookie路径。方法:setPath()。
https://i-blog.csdnimg.cn/direct/163fa0dd27814e709993fcd7ce533fd4.png
3、Cookie覆盖。



[*]修改"/user/AServlet"。重新访问。
https://i-blog.csdnimg.cn/direct/381c3935ab1d4c6dbd485e9f2fa833bb.png
https://i-blog.csdnimg.cn/direct/68cc07568f7e443d955b3acaf2df519f.png


(5)Cookie的生命周期。

1、什么是Cookie的生命?



[*] Cookie不但是有name(键名)和value(键值)。Cookie尚有生命。
[*] 所谓Cookie生命就是Cookie在客户端的有用时间。可以通过setMaxAge(int)来设置Cookie的最大有用时间。
2、Cookie殒命。



[*] 像上面的BServlet,我把全部的客户端欣赏器关闭(竣事本次会话)。对应的Cookie(cookie1的k1与v1000、cookie2的k2与v2000)消散了。
[*] 由于它们都是会话级别。会话竣事,对应的Cookie主动失效。
https://i-blog.csdnimg.cn/direct/3273c88743c54bd8ae65d52046222dc9.png


[*]k1、k2已消散。
https://i-blog.csdnimg.cn/direct/0e176dc047ea4710a75525b1e4c0881f.png
3、Cookie最大存活时间。



[*] 默认存活时间:会话级别。只有客户端的欣赏器关闭,这个Cookie就会被删除!
[*] 注意:假如是服务器关闭,只要客户端不关闭,Cookie不会被删除。


[*] 调用setMaxAge(int 参数) 设置最大存活时间。参数的单位:秒。
[*] 具体的实践各人本身实验!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
页: [1]
查看完整版本: JavaWeb学习(2)(Cookie原理(超具体)、HTTP无状态)