位置: IT常识 - 正文

Cookie和Session详解(cookie与session的作用和原理)

编辑:rootadmin
Cookie和Session详解

目录

前言:

Session详解

Cookie和Session区别和关联

服务器组织会话的方式

使用Tomcat实现登录成功跳转到欢迎页面

登录前端页面

登录成功后端服务器

重定向到欢迎页面

抓包分析交互过程

 小结:


前言:

推荐整理分享Cookie和Session详解(cookie与session的作用和原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cookie和session的用法,cookie与session的作用,cookie 和session,cookie与sessionid,cookie和session的用法,cookie 和session,cookie与session的作用和原理,cookie与sessionid,内容如对您有帮助,希望把文章链接给更多的朋友!

    Cookie之前博客有介绍过,就是服务器在用户这边搞的一个持久化存储机制。通过服务器这边set-cookie进行设置,用户发起请求通过cookie字段将cookie中的内容发送到服务器,服务器就知道客户端这边处于一个什么样的状态。

    Session是搭配Cookie使用的(也可以不搭配)。对于一个登录需求来说,通过用户的SessionId(存储在Cookie中),服务器这边就可以判断用户是否处于一个登录状态。

Session详解

注意:

    服务器不知道我的身份信息。针对登陆操作,淘宝会查询数据库,验证用户名和密码是否正确,如果正确则登录成功,淘宝会把当前的身份信息在内存中存一份。

    同时给这个用户分配一个表示身份信息的序号,整数或者字符串,具有唯一性(sessionId)。服务器使用像hsah表这样的结构,把序号作为key,身份信息作为val,存储起来(这些键值对称为session)。

    服务器通过Set-Cookie将SessionId保存到用户本地。后续请求中,服务器收到Cookie中的身份序号(SessionId),就会查询上述的hash表,判断用户是谁(避免重复输入账号密码),如果没查到,则需要用户重新登录。

Cookie和Session区别和关联

关联:在网站登录功能中搭配使用。

区别:

    1)Cookie是客户端的存储机制,Session是服务器的存储机制。

    2)Cookie里面可以存各种键值对(还可以存别的),Session则专门用来保存用户信息。

    3)Cookie完全可以单独使用,不搭配Session(实现非登录的场景)。Session也可以不搭配Cookie(手机app登录服务器,没有cookie概念,但存在Session,Cookie和浏览器强相关)。

    4)Cookie是Http协议中的一个部分。Session则可以和http无关。

服务器组织会话的方式Cookie和Session详解(cookie与session的作用和原理)

注意:

    每一个会话是一个键值对,对应到一个客户端。服务器这里可以对应多个客户端,也就可以保存多组会话。

    每个会话对象HttpSession里,也是以键值对方式保存的。存一些用户信息,这里面内容都是自定义的。Java中通过,setAttribute(),getAttribute()存取键值对。用来设置HttpSession对象里的一些内容。

使用Tomcat实现登录成功跳转到欢迎页面登录前端页面

    使用from表单构造post请求,将数据通过body传输到后端。

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title></head><body> <form action="login" method="post"> <input type="text" name="username"> <br> <input type="password" name="password"> <br> <input type="submit" value="提交"> </form></body></html>登录成功后端服务器

    前端发起post请求,后端Tomcat调用doPost()方法。判断登录,登录成功则创建会话Session。将用户名设置到HttpSession对象中,然后重定向到欢迎页面。

    创建会话Session,每个客户端都会有一个这样的会话,服务器就使用像hash表这样的结构组织这些会话(key:SessionId   val:HttpSession)。

    getSession(true)判断当前请求是否已经有对应的会话(拿着cookie中的sessionId查一下hash表)。如果没有则创建新会话,插入hah表,如果有则返回对应的HttpSession对象。

    getSession(false)获取SessionId对应的HttpSession对象。同样查询hash表,如果查到了则返回对应的HttpSession对象,如果没有则返回null。

    创建过程:1)构造HttpSession对象。 2)构造一个唯一SessionId。 3)把这个键值对插入hsah表。 4)把sessionId设置到响应报文Set-Cookie字段中。

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 { String userName = req.getParameter("username"); String password = req.getParameter("password"); //判断登录 if(!userName.equals("zhansan") && !userName.equals("lisi")) { System.out.println("登录失败,用户名错误"); resp.sendRedirect("login.html"); return; } if(!password.equals("123")) { System.out.println("密码错误"); resp.sendRedirect("login.html"); return; } //登录成功 //创建会话 //所谓会话是一个键值对,key是sessionId,value是HttpSession对象 //每个客户端登录都会有一个这样的会话(键值对),服务器需要管理多个会话,搞个hash表存储 //getSession(true)判断当前请求是否已经有对应的会话了(拿着cookie中的sessionId查一下hash表) //如果SessionId不存在,就创建新会话,插入hash表,如果查到了就返回对应会话 //创建过程:1)构造HttpSession对象 2)构造一个唯一sessionId 3)把这个键值对插入hsah表 4)把sessionId设置到响应报文Set-Cookie字段中 HttpSession session = req.getSession(true); //HttpSession对象也是一个键值对 //setAttribute(),getAttribute()存取键值对 //把当前用户名保存到会话中 session.setAttribute("username", userName); //重定向到主页 resp.sendRedirect("index"); }}重定向到欢迎页面

    先判断用户是否登录,如果没有登录则重定向到登录页面。登录成功后构造欢迎页面,将用户名显示到页面中。只要登录成功后续请求多次服务器,Cookie字段都会包含SessionId。

    由于这个页面是重定向的,浏览器会发起get请求,这里就需要重写doGet方法。

    这里需要先获得用户的HttpSession对象,通过getSession(false)获取SessionId对应的HttpSession对象。如果返回值为null则用户没登录,否则登录成功构造欢迎页面。

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 { //通过重定向,浏览器发送get请求 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //先判断用户是否登录,如果没登陆重定向到登录页面 //已经登录,根据会话中的用户名,显示到页面中 //这个操作不会触发会话的创建,根据sessionId查找HttpSession对象(根据key查找value) HttpSession session = req.getSession(false); if(session == null) { System.out.println("用户未登录"); resp.sendRedirect("login.html"); return; } //登录成功 String userName = (String) session.getAttribute("username"); //构造页面 resp.setContentType("text/html; charset=utf8"); resp.getWriter().write("欢迎" + userName + "回来"); //只要登录成功,后续请求都会带上刚才这个cookie(包含sessionId) }}抓包分析交互过程

 小结:

    这里的代码需要理清每次请求和响应的具体逻辑。根据这些需求约定好前后端交互接口,代码实现需要严格按照约定来实现。

本文链接地址:https://www.jiuchutong.com/zhishi/299283.html 转载请保留说明!

上一篇:人工智能学习——模糊控制(学人工智能哪家机构比较好)

下一篇:软考-软件设计师 知识点整理(一篇就过了 建议收藏)(软考软件设计师考试时间)

  • ui网页设计选择网站模板,规划网站选择合适的模板

    ui网页设计选择网站模板,规划网站选择合适的模板

  • 电脑主机按钮坏了怎么开电脑(电脑主机按钮坏了 如何打开电脑)

    电脑主机按钮坏了怎么开电脑(电脑主机按钮坏了 如何打开电脑)

  • 微信拒收对方信息后,还能看到信息吗(微信拒收对方信息怎么解除)

    微信拒收对方信息后,还能看到信息吗(微信拒收对方信息怎么解除)

  • ipad右上角有个话筒(ipad右上角有个绿色的点)

    ipad右上角有个话筒(ipad右上角有个绿色的点)

  • switch底座怎么充电(switch底座怎么充手柄)

    switch底座怎么充电(switch底座怎么充手柄)

  • oppo手机微信运动步数为0怎么办(oppo手机微信运动为什么数据都是0)

    oppo手机微信运动步数为0怎么办(oppo手机微信运动为什么数据都是0)

  • 手机售后检测会拆机吗(手机售后检测会看到隐私吗)

    手机售后检测会拆机吗(手机售后检测会看到隐私吗)

  • lcd液晶显示器的原理(LCD液晶显示器的四大特点)

    lcd液晶显示器的原理(LCD液晶显示器的四大特点)

  • 腾讯会议共享屏幕是什么意思(腾讯会议共享屏幕会不会泄露个人信息)

    腾讯会议共享屏幕是什么意思(腾讯会议共享屏幕会不会泄露个人信息)

  • 小米10充电要多久(小米10充电多少安)

    小米10充电要多久(小米10充电多少安)

  • 使用原彩显示会烧屏吗(原彩显示会影响色准吗)

    使用原彩显示会烧屏吗(原彩显示会影响色准吗)

  • 抖音的表情包怎么保存(抖音的表情包怎么弄到微信)

    抖音的表情包怎么保存(抖音的表情包怎么弄到微信)

  • qq扩列在哪里打开,为什么我没有(qq扩列在哪里打开最新版本2023)

    qq扩列在哪里打开,为什么我没有(qq扩列在哪里打开最新版本2023)

  • qq不用3年了会被收回吗(qq号3年不用会被注销)

    qq不用3年了会被收回吗(qq号3年不用会被注销)

  • 怎么查自己名下的手机号(怎么查自己名下有没有房产)

    怎么查自己名下的手机号(怎么查自己名下有没有房产)

  • 阿里tv助手怎么投屏(阿里tv助手怎么投屏照片)

    阿里tv助手怎么投屏(阿里tv助手怎么投屏照片)

  • 微云收藏在哪里打开(微云收集文件功能)

    微云收藏在哪里打开(微云收集文件功能)

  • ipad 一代二代区别(ipad一代二代什么意思)

    ipad 一代二代区别(ipad一代二代什么意思)

  • iphone夜景模式怎么开(iPhone夜景模式怎么只有1秒)

    iphone夜景模式怎么开(iPhone夜景模式怎么只有1秒)

  • ppt配色遵循什么原则(ppt常见的配色方法)

    ppt配色遵循什么原则(ppt常见的配色方法)

  • 拼多多删除好友怎么加回来(拼多多删除好友是双向还是单向的)

    拼多多删除好友怎么加回来(拼多多删除好友是双向还是单向的)

  • oppoa59电池容量多大(oppoa59s电池)

    oppoa59电池容量多大(oppoa59s电池)

  • 打印机乱码不停打印(打印机乱码不停打印怎么解决视频)

    打印机乱码不停打印(打印机乱码不停打印怎么解决视频)

  • 电脑键盘线插在哪里(电脑键盘线的线插在哪个位置怎么操作)

    电脑键盘线插在哪里(电脑键盘线的线插在哪个位置怎么操作)

  • 面试官问出这几道算法题,你能扛住么?(面试官问几个问题)

    面试官问出这几道算法题,你能扛住么?(面试官问几个问题)

  • 解除劳动一次性补偿金怎么记账
  • 跨区域涉税事项报验
  • 投标保证金利息计算起止时间
  • 内部伙食费购买会计分录
  • 机票的抵扣进项怎么抵扣
  • 政府发放的人才补贴,企业可以增加条款要求离职返还吗
  • 招聘服务合同印花税
  • 公司购买车辆抵扣税
  • 为什么购买的货没有发票
  • 一次性筷子的消费税
  • 在分公司关闭过程中,资产损失怎么申报扣除
  • 试用期社保是按照应发工资缴纳吗
  • 来料加工与进料加工的相似之处有
  • 股权转让过渡期损益会计处理
  • 货币的兑换是怎么决定的
  • 金税三期个人所得税税率
  • 超市的发票是什么种类
  • 当期可抵扣进项税额包括进项转出额吗
  • 呆帐死帐处理
  • 小规模购买农产品
  • 证券公司手续费怎么收
  • 专票已经认证能作废吗
  • 公司对外汇款需要什么手续
  • 结转本月销售成本的会计分录
  • 广告公司返点是什么意思
  • 按揭的车可以只买交强险吗
  • 什么情况下确认成本
  • 苹果x如何显示电量数字
  • 一般纳税人存货入账价值
  • 公司实缴资本有什么风险
  • 什么是债券持有人
  • 王者荣耀电脑版怎么键盘操作
  • c盘显示隐藏
  • PHP:mb_ereg_search_setpos()的用法_mbstring函数
  • win10桌面2怎么使用
  • ecshop怎么用
  • uni app怎么样
  • npm ERR! code E404 在vscode安装插件时报错的解决方案
  • 供热企业的税收分类编码
  • 电维护费多少合法
  • 一个楼盘可以开盘几次
  • 2018年残保金申报表填表说明
  • HttpServletRequest 获取参数
  • 调参数是什么意思
  • 应收的货款
  • 理财产品的分红和收益是分开的吗
  • 增值税发票品名 归类
  • Sqlserver 2005使用XML一次更新多条记录的方法
  • 农民工专户个税怎么申报
  • 企业前期开办的费用怎么做会计分录
  • 电商收服务费合法吗
  • 存货报废进项税额需要转出吗
  • 计提生产经营所得
  • 消费税纳税人的具体纳税期限由主管税务机关
  • 废旧物资处理的税金
  • 劳动仲裁要出面吗
  • 场地租赁都需要交什么税
  • 管理费用通俗理解
  • 财务会计与管理会计的区别与联系?谁更棒?
  • win7系统计算机管理功能打不开
  • 如何安装win2000
  • WIN10系统中WPS字体颜色浅
  • 安装xp后win7不能用怎么办
  • linux 更新系统
  • win7启动应用程序的方式
  • win10系统下如何安装谷歌浏览器插件?win10系统下谷歌浏览器插件的安装方法图文教程
  • win10系统中怎么打开IE浏览器
  • windows预览0x80072ee7
  • bootstrap4和3
  • percona mongodb
  • css可继承
  • 深入理解新发展理念,推进供给侧结构性改革
  • python web网站
  • unity相关问题
  • js判断当前页面是否为空
  • HTTP状态代码以及定义(解释)
  • 非贸付汇代扣代缴增值税可以抵扣吗
  • 土地增值税网上申报流程
  • 国办函和国办发
  • 企业2017年
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设