Cookie和Session

这篇具有很好参考价值的文章主要介绍了Cookie和Session。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HTTP协议自身是属于无状态的协议,意思就是默认情况下HTTP协议的客户端和服务器的上一次通信和下一次通信之间是没有关系的,在实际开发中我们需要知道请求之间的关联关系,例如我们登陆过一个网站,当再次登陆该网站时,服务器就知道已经登陆过该网站了

1.回顾

回顾关于cookie的几个知识点

1.cookie是浏览器提供的,持久化存储数据的机制

2.cookie 是从服务器返回给浏览器的,是由程序员代码决定的要在浏览器cookie中保存哪些数据,通过http响应的Set-Cookie字段把键值对写回去

3.cookie在浏览器存储的目的是后续访问服务器的时候,通过请求的header将cookie发送给服务器

作用:因为服务器是同时服务多个客户端的,客户端需要借助cookie来告诉服务器当前提供的服务到哪个环节了,服务器也可以通过cookie识别该客户端

4.cookie存储在浏览器所在的硬盘中,浏览器根据域名分别存储,有很多cookie,访问一个网站就按域名存储一个cookie

cookie最典型的应用:表示用户的身份信息.

很多网站多有登录功能

Cookie和Session

当浏览器再次访问服务器时, 请求中就会有cookie,cookie中带有身份序号,服务器查询到身份序号,就能判断身份信息,避免了重复输入登录信息.没查到就重新输入登录信息.访问其他页面也是相同,如果有cookie,就能访问服务器其他页面,删除cookie后刷新,登陆状态就变了,因为本地存储的身份序号被删除了,再次发送请求时,服务器查询不到身份序号了

cookie过期可能是服务器或客户端删掉了,安全性越要高的网站cookie过期时间越长.

方法
String getName() :该方法返回 cookie 的名称。名称在创建后不能改变。 ( 这个值是 SetCooke 字段设置给浏览器的 )
String getValue() :该方法获取与 cookie 关联的值
void setValue(String newValue) :该方法设置与 cookie 关联的值
HTTP 的cookie字段中存储的实际上是多组键值对. 每个键值对在 Servlet 中都对应了一个cookie对象.
通过 HttpServletRequest.getCookies() 获取到请求中的一系列cookie键值对.
通过 HttpServletResponse.addCookie() 可以向响应中添加新的cookie键值对.

2.Session

上述服务器生成了一些键值对结构数据,就是session(会话)

生成的唯一的身份序号叫做sessionid,也就是key,value就是记录的身份信息

sessionId是由服务器生成的"唯一性字符串",从 session 机制的角度来看, 这个唯一性字符串

称为 "sessionId". 但是站在整个登录流程中看待 , 也可以把这个唯一性字符串称为 "token"(代币象征)
具体流程:用户登陆时,服务器在session中添加一个key-value记录,并且将key通过setCookie返回给
客户端,客户端存储了cookie信息
客户端后续再发请求到服务器的时候,会通过http的header携带cookie信息
服务器收到请求之后,根据根据请求中的sessionid/token 在s ession 信息中获取到对应的用户信息 ,
再决定后续的操作
servlet的session默认是保存在内存中的,服务器重启后session会消失
Cookie与Session的关联与区别
关联:在登陆网站功能中要配合使用
区别:cookie是客户端的存储机制,session是服务器的存储机制
cookie里面可以存储各种键值对,除了sessionid还可以存别的,session是专门保存用户的身份信息的
cookie完全可以单独使用,不搭配session
session也可以不搭配cookie,比如手机app登录服务器,也需要session,但是没有cookie概念,cookie是跟浏览器强相关的
cookie是Http协议中的一部分,但是session则是可以与HTTP无关的,其他协议也能用session

3.模拟登录功能

下来我们写一个代码体验
模拟上述所说的登录功能
先写一个html,提交post请求
Cookie和Session
需求:当前端提交请求,LoginServlet验证是否信息正确,如果登陆成功,跳转到主页,IndexServlet构建动态页面显示用户的名字
创建两个类:LoginServlet类和IndexServlet类
Cookie和Session

 点击提交,然后进行抓包

Cookie和Session

 实现两个类

先编写LoginServlet处理请求

package login;


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

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //先使用getParameter获取到username,password的值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //验证信息是否正确
        //正常用数据库保存,这里写死
        //合法:zhangsan  12345
        if(!username.equals("zhangsan")){
            //失败
            //重定向=>登录页
            System.out.println("用户名错误");
            resp.sendRedirect("login.html");
            return;
        }
        if(!password.equals("12345")){
            //失败
            System.out.println("密码错误");
            resp.sendRedirect("login.html");
            return;
        }
        //成功

        //创建会话
        HttpSession session = req.getSession(true);
        //getSission(true);是拿着sessionId查一下哈希表,
        //如果sessionId不存在.或者没查到,就创建新会话插入到哈希表
        // 查到了就返回查到的结果
        //如何创建?
        //1.构造HttpSession对象
        //2.构造唯一的sessionId
        //3.把这个键值对插入哈希表
        //4.把sessionId设置到响应报文Set-Cookie字段

        //将用户信息保存到session对象中.
        session.setAttribute("username",username);
        //重定向到主页
        resp.sendRedirect("index");

    }
}

Cookie和Session

getSission(true);是拿着sessionId查一下哈希表,如果sessionId不存在.或者没查到,就创建新会话插入到哈希表,查到了就返回查到的结果,没查到就重新创建一个,(false)是不创建.有了获取,没有不管
创建会话过程?
1.构造HttpSession对象
2.构造唯一的sessionId
3.把这个键值对插入哈希表
4.把sessionId设置到响应报文Set-Cookie字段

HttpSession对象也是一个键值对

每个会话中:

key:sessionId value:HttpSession对象

每个HttpSession对象中:

类似

key:"username"value:"zhangsan"

setAttribute,getAttribute来存取键值对,内容是程序员定义

接下来编写生成动态页面代码

package login;

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

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //先判定用户登陆状态
        //若没登陆.先登录
        //若登录,根据绘画用户名信息,显示到页面上
        HttpSession session = req.getSession(false);
        //不会触发会话创建
        if(session==null){
            System.out.println("用户未登录");
            resp.sendRedirect("login.html");
            return;
        }
        String username = (String) session.getAttribute("username");
        //执行到这里,session和post中的是一个对象
        //根据同一个sessionid对应到的对象
        resp.setContentType("text/html;charset = utf8");
        resp.getWriter().write("欢迎回来!" + username);
    }
}

 HttpSession session = req.getSession(false);
        //不会触发会话创建

意思是如果有session,就获取,没有也不创建

getAttribute("username");是获取键的值

重启服务器执行:

这是第一次执行:

抓包结果

请求

Cookie和Session

响应

Cookie和Session

注意这里设置了cookie

jsessionid就是sessionid 

Location是接下来要跳转的重定向的位置

注意:我们第二次发起请求了!

Cookie和Session

 抓包后:

Cookie和Session

Cookie: JSESSIONID=C21C914A93AC8AD3A546B6F9ED26A274

我们可以发现有个 JSESSIONID,这就是sessionId,值是唯一的数字.第一次的post请求是没有这个字段的!!

 响应结果:

Cookie和Session

只要这次登陆完成了,后续登录请求都会带上刚才的cookie的值(sessionId) 文章来源地址https://www.toymoban.com/news/detail-427326.html

到了这里,关于Cookie和Session的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

    目录 URL格式 HTTP请求和响应报文的字段? HTTP请求方法 常见的状态码 GET 和 POST 的区别 Cookie 和 Session ? :是用来分割URL的主体部分(通常是路径)和查询字符串(query string)查询字符串是一组键值对的参数 query string :是键值对的结构,分割键值对,=分割键和值 Content-Type

    2024年02月07日
    浏览(51)
  • 【网络应用层协议】【HTTP】详解HTTP与HTTPS、POST 请求与 GET请求 、TCP与UDP、cookie和session的区别

    目录 1. HTTP和HTTPS的区别 2. POST 请求与 GET 请求区别 3. TCP与UDP的区别 4. cookie和session的区别

    2024年04月14日
    浏览(49)
  • 精通api接口测试,接口分类,接口架构,http,webservice,dubbo接口协议,接口流程,接口工具,cookie,session,token接口鉴权原理以及实战

    接口口测试和接口自动化测试一直都是很多人混乱的概念。所以搞清楚2个的概念是很重要的一件事情。 接口:一段具备逻辑处理功能的程序代码组成的,可被其他方法、服务或应用所使用。 对于调用接口的那一方,可以把接口看做一只黑匣子,只需要负责按约定传入参数,

    2024年02月02日
    浏览(49)
  • Cookie和Session

    HTTP协议自身是属于无状态的协议,意思就是默认情况下HTTP协议的客户端和服务器的上一次通信和下一次通信之间是没有关系的,在实际开发中我们需要知道请求之间的关联关系,例如我们登陆过一个网站,当再次登陆该网站时,服务器就知道已经登陆过该网站了 回顾关于cookie的几

    2024年02月01日
    浏览(38)
  • session和cookie详解

    访问网站后在本地存储的相关网站信息 ,是服务器在本地机器上存储的文本,并随着每一个请求发送到同一服务器上,以便某些网站为了辨别用户身份,由用户客户端计算机暂时或永久保存的信息,是客户端保存状态的一种方式。 1.web程序是使用HTTP协议传输的,而HTTP协议是

    2024年02月05日
    浏览(45)
  • session和cookie

    三种域对象 这三个域对象的大小关系: request session application, 尽量使用小的域 request 请求域(请求级别的), 对应的类名:HttpServletRequest session会话域(用户级别的), 对应的类名:HttpSession application应用域(项目级别的,所有用户共享的)对应的类名:ServletContext 三个域对象都

    2024年02月07日
    浏览(44)
  • 【Cookie和Session】

    🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈 戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 一、Cookie和Session(面试常考)  1. Cookie 2. Session  3. Cookie和Session是如何一起工作的?  4. Cookie和Session的过期校验 5. Cookie和Session的关联和区别 二、

    2024年02月07日
    浏览(35)
  • 认识Cookie和Session

    一个网站,怎么证明你来过? 客户端          服务端 1.服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;cookie 2.服务器登记你来过了,下次你来的时候我来匹配你;session 现在我们来了解cookie和session cookie是什么? cookie(cookie)是指网站为了辨别用户身

    2024年02月03日
    浏览(58)
  • cookie+session和token

    总结说在前面: session:起源于服务端,保存在服务端(服务器或者数据库),通过cookie传递给用户,用户每一次发送HTTP请求的时候,通过验证cookie中的session-id来验证用户身份。 jwt(json web token):起源于服务端,保存在浏览器(cookie或者storage),和session一样,用户每一次发

    2024年02月19日
    浏览(43)
  • session、cookie、token的区别?

    今天就来理一理session、cookie、token这三者之间的关系! 我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。 这种无状态的方式就

    2023年04月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包