首页 > 其他分享 >【web】Cookie/Session

【web】Cookie/Session

时间:2024-09-25 17:50:49浏览次数:11  
标签:web 浏览器 Session resp req session Cookie cookie

会话:用户打开了一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话

有状态会话:记录曾经来过

一个网站怎么证明你来过

客户端    服务器

1,服务端给客户端一个信件,客户端下次访问服务端得时候带上信件即可;cookie

2,服务器登记你来过了,下次来得时候我来匹配你;

保存会话得两种技术如下:

Cookie

服务器给客户端cookie-->客户端请求的时候携带cookei(资源)

  • 客户端技术(响应,请求)
  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
  • cookie大小有限制4kb
  • 300个cookie浏览器上限
  • 删除cookie
    • 不设置有效期,关闭浏览器,自动失效
    • 设置有效期时间为0
      • cookie.setMaxAge(0);

Session(重点)

服务器给客户端sessionId(每个用户唯一)-->客户端拿到的是sessionId(钥匙),资源在session里面

  • 服务器技术,利用这个技术可以保存用户得会话信息,可以把信息数据放到session
  • 什么是session?

    • 服务器会给每一个用户(浏览器)创建一个seesion
    • 一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
    • 场景:用户登录之后,整个网站就都可以访问了   --保存用户的信息,保存购物车信息
  • 使用场景session:
    • 保存用户登录信息,下 次不用再登录,可以直接进入
    • 购物车信息
    • 在整个网站中经常会使用得数据,保存到
  • 删除session
    • 手动删除
      • session.removeAttribute("name");//删掉其中一个元素
        session.invalidate();//注销   之前的session会被删掉,但会立马生成一个新得

    • web.xml里面设置自动失效时间
      • <!--  设置sessionm默认得失效时间-->
          <session-config>
        <!--    15分钟后session自动失效,以分钟为单位-->
            <session-timeout>15</session-timeout>
          </session-config>

session和cookie区别

  • cookie:
    • 是把用户得数据,写给用户的浏览器,浏览器保存
    • 不是很安全
    • 单个保存得数据不能超过4k,大多浏览器限制一个站点最多只能由20个cookie
  • session
    • 把用户得数据些写到用户独占得session中,服务器端保存(保存重要信息,减少服务器资源浪费)
    • 相对安全一点
    • 储存于服务器,浏览器对其无影响
  • session对象由服务创建

Cookie应用

1,从请求中拿到cookie信息

2,服务器相应给客户端cookie

Cookie[] cookies = req.getCookies();//获得cookie
cookie.getName()//拿到cookie的key
cookie.getValue()//拿到cookie的value
Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置保存最大时间,有效期关闭会话依然存在  24h 60min  60sec
resp.addCookie(cookie);//响应给客户端一个cookie

cookie:一般会保存再本地用户目录下appdata;

测试设置cookie案例

public class CookieDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //1,解决中文乱码问题
       req.setCharacterEncoding("gbk");
       resp.setCharacterEncoding("gbk");
       //2,服务器端从客户端获取cooKie
        Cookie[] cookies = req.getCookies();
        PrintWriter out = resp.getWriter();
        //3,判断是否为空
        if(cookies != null){//不为空,拿到上次登录时间
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("name")){
                    out.println("你上一次得访问时间是:"+cookie.getValue());
                }
            }
        }else {//为空设置登录时间
            out.println("这是你第一次登录");
        }
        Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");
        cookie.setMaxAge(24*60*60);//设置保存最大时间,有效期关闭会话依然存在  24h 60min  60sec
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

手动删除cookie案例

public class CookieDemo02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");
        cookie.setMaxAge(0);
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 如果传递中文遇到乱码

URLEncoder.encode("我们","UTF-8");//编码
URLDecoder.decode(cookie.getValue(),"UTF-8");//解码

Session应用(重点)

测试设置session案例

存string也可以存对象

public class SessionDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //解决乱码问题
        req.setCharacterEncoding("gbk");
        resp.setCharacterEncoding("gbk");
        resp.setContentType("text/html;charset=utf-8");

        //得到session
        HttpSession session = req.getSession();
        //给session中存东西
        session.setAttribute("name","我们");
        //获取session的Id
        String sessionId = session.getId();

        //判断session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("session创建成功,id="+sessionId);
        }else {
            resp.getWriter().write("session已经在服务器中存在了,id="+sessionId);
        }

        //session在创建的时候做了什么事
//        Cookie cookie = new Cookie("SESSIONID",sessionId);
//        resp.addCookie(cookie);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp);
    }
}






//不同类去获取
public class SessionDemo02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //解决乱码问题
        req.setCharacterEncoding("gbk");
        resp.setCharacterEncoding("gbk");
        resp.setContentType("text/html;charset=utf-8");
        //得到session
        HttpSession session = req.getSession();
        String name = (String) session.getAttribute("name");
        resp.getWriter().write(name);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp);
    }
}

手动删除session案例 

public class SessionDemo03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //得到session
        HttpSession session = req.getSession();
        session.removeAttribute("name");//删掉其中一个元素
        session.invalidate();//注销   之前的session会被删掉,但会立马生成一个新得
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp);
    }
}

自动注销配置web.xml

<!--  设置sessionm默认得失效时间-->
  <session-config>
<!--    15分钟后session自动失效,以分钟为单位-->
    <session-timeout>15</session-timeout>
  </session-config>

 

标签:web,浏览器,Session,resp,req,session,Cookie,cookie
From: https://blog.csdn.net/m0_63789588/article/details/142484844

相关文章

  • IIS Web服务器安装配置教程(图文)---IIS安装(win10)
    IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。IIS是什么很多朋友都不知道IIS是什么?其实IIS是InternetInformation......
  • 基于WebServer的工业数据采集系统
     一、项目框架及流程二、http简介HTTP协议是HyperTextTransferProtocol(超文本传输协议)的缩写,是用于WebBrowser(浏览器)到WebServer(服务器)进行数据交互的传输协议。HTTP是应用层协议HTTP是一个基于TCP通信协议传输来传递数据(HTML文件,图片文件,查询结果等)HTTP协议......
  • 大模型项目部署时Gradio Web页面打不开或者打开用不了及pydantic.errors.PydanticSche
    问题描述 在复现大模型demo时连接器和模型加载都没问题,但是gradio界面打不开或者打开后用不了原因分析:感觉应该是gradio的版本问题导致该文件缺少相关文件解决方案:可以首先按照上面要求下载文件https://cdn-media.huggingface.co/frpc-gradio-0.2/frpc_linux_a......
  • 人工智能 | 手工测试用例转Web自动化测试生成
    简介在传统编写Web自动化测试用例的过程中,基本都是需要测试工程师,根据功能测试用例转换为自动化测试的用例。市面上自动生成Web或App自动化测试用例的产品无非也都是通过录制的方式,获取操作人的行为操作,从而记录测试用例。整个过程类似于但是通常录制出来的用例可用性、可维......
  • Websocket测试工具,在线调试 - 在线工具
    WebSocket测试工具是用于测试WebSocket连接、发送和接收消息的工具。它们通常提供一个简单的用户界面,使开发人员能够快速验证WebSocket服务器的功能和性能。在线Websocket测试工具体验地址:https://www.ewbang.com/websocket/index.html什么是WebSocket?WebSocket是一种在单......
  • 解决ifream 跟web-view 无法访问orchard core等一些url问题。
    域名不一样会因为安全设置无法跳转//添加自定义中间件来设置X-Frame-Optionsapp.Use(async(context,next)=>{//设置为ALLOW-FROM以允许特定域名context.Response.Headers["X-Frame-Options"]="ALLOW-FROMhttps://pc.qubild.162super.com,https://qubild.162supe......
  • DC00015基于java web校园网上购物系统
    1、项目功能演示DC00015【含配套文档】基于javaweb校园网上购物系统2、项目功能描述 基于javaweb校园网上购物系统分为用户和系统管理员两个角色。2.1用户功能1、系统登录、用户注册、忘记密码2、商品浏览、商品详情3、购物车、付款4、我的订单5、修改密码、......
  • WebSocket 教程
    WebSocket教程作者: 阮一峰日期: 2017年5月15日WebSocket 是一种网络通信协议,很多高级功能都需要它。本文介绍WebSocket协议的使用方法。一、为什么需要WebSocket?初次接触WebSocket的人,都会问同样的问题:我们已经有了HTTP协议,为什么还需要另一个协议?它能带来什......
  • 2024年9月最新web3开发人员薪资情况(包括不同语言、各个国家)
    开发人员的薪水是多少?Web3开发人员的平均年薪为14万至20万美元。薪水取决于技术、编程语言、工作经验年限、地点和资历。量化开发人员每年可赚20万至30万美元高级开发人员年薪16万至25.7万美元北美开发商年薪15万至26.5万美元按开发人员类型和编程......
  • 华为s5735交换机配置开启web页面
    环境win10, 华为s5735交换机配置方法华为交换机(S5735S-L24P4S-A1)该型号交换机默认不开启web管理模式。需要通过Console口配置模式开启web管理模式,方便使用图形化界面升级操作系统1.进入配置命令模式PleasePressENTER.Aninitialpasswordisrequiredforthefirstloginvia......