首页 > 其他分享 >Cookie和Session

Cookie和Session

时间:2023-06-24 17:36:10浏览次数:35  
标签:浏览器 Session resp session cookie Cookie id

Cookie和Session

会话

  • 什么是会话?

    会话是浏览器和服务器之间的多次请求和响应

    也就是说,从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止的这段时间内容产生的多次请求和响应,合起来叫做浏览器和服务器之间的一次会话

  • 有状态会话:一个网站知晓你登陆过、存储了一些基本信息

保存会话的两种技术

  1. cookie:
    • 一种客户端技术,服务器响应相关信息给浏览器,保存在浏览器本地
  2. session:
    • 服务器技术,保存会话信息到服务器中,把信息和数据放在session中

Cookie是一种存储在计算机浏览器目录中的文本文件

一个例子:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("gbk");
        resp.setCharacterEncoding("gbk");

        PrintWriter out = resp.getWriter();
        //cookie 服务器端从客户端取得
        Cookie[] cookies = req.getCookies();//这里返回数组
//        判断cookie是否存在
        if(cookies!=null){
            out.print("你第一次访问的时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //获取cookie的名字
                if(cookie.getName().equals("LastLoginTime")){
//                    显示最后一次登录的值
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.print("这是你第一次访问网站");
        }
//        服务器给客户端响应cookie
        Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
        resp.addCookie(cookie);

    }

第一次访问:

第二次访问:

  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
  • cookie大小有限制4kb
  • 300个cookie浏览器上限

删除cookie

  • 不设置有效期,关闭浏览器,自动失效

  • 设置有效期

    //        服务器给客户端响应cookie
            Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
    //        设置有效期为0
            cookie.setMaxAge(0);
            resp.addCookie(cookie);
    

如果cookie设置为中文可能会出现乱码:可以通过以下方法解决

URLDecoder.decode(cookie.getValue(),"UTF-8");解码
URLEncoder.encode("啊","utf-8");编码

Session

  • 服务器会给每一个用户(浏览器)创建一个session对象
  • 一个Session独占一个浏览器,只要浏览器没关,session就存在

Session和cookie区别:

  • cookie是把用户的数据保存在浏览器
  • session把用户的数据写到用户独占session中,服务器端保存
  • session对象由服务创建

创建场景:

  • 保存一个登录用户的信息
  • 购物车信息
  • 整个网站经常使用的数据

使用例子:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
//        浏览器显示乱码问题
        resp.setContentType("text/html;charset=utf-8");
//        得到session
        HttpSession session = req.getSession();
//        给session存储东西
        session.setAttribute("name","lihua");
//        获得session的id
        String id = session.getId();
//        判断session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("session创建成功,id是:"+id);
        }else {
            resp.getWriter().write("session已经在服务器中存在,id是:"+id);
        }
    }

/*session创建的时候创建一个cookie响应回去,键值分别为JSESSIONID,和session的Id,浏览器通过这个判断session是否已经创建,和辨别不同的用户

结果:可以看出不同浏览器id不同

另外一些其他方法:

session.removeAttribute("name");//删除键值
session.invalidate();//注销session
//注销后重新生成一个id,相当于重新登录或关闭浏览器

也可以在web.xml中设置默认失效时间

<session-config>
    <!--    设置session默认失效时间:1分钟-->
    <session-timeout>1</session-timeout>
</session-config>

标签:浏览器,Session,resp,session,cookie,Cookie,id
From: https://www.cnblogs.com/rainaftersummert/p/17501363.html

相关文章

  • SAP Spartacus 和 Sticky session 相关的话题
    当Commerce后端运行多个Pods/节点时,当连续的请求过快到达时,后端将无法在集群中发送缓存失效通知。此外,如果多个请求分散到多个节点上,会产生延迟和不必要的资源消耗。Spartacus尽可能与单个后端进行交互,以服务于单个客户端。这通常被称为stickysession.Stickysession(粘滞会......
  • VirtualBox启动报错 E_FAIL (0x80004005) SessionMachine
    问题描述:每次卸载重装virtualbox后的第一次启动是成功的,之后就又报错。0x80004005报错解决方案:1、可以尝试使用“管理员身份”运行virtualbox,再打开虚拟机。2、可以尝试先“导出虚拟机”,然后再“导入虚拟机”。问题原因分析:可能是安装镜像系统时的virtualbox版本和后来新装......
  • v$session 会话相关SQL
    v$session常用字段如下SIDSERIAL#SPIDSQL_IDSTATUSROW_WAIT_OBJ#BLOCKING_SESSION_STATUS由上图可以看到持锁的sid为80,Blockingsessionstatus:*VALID状态valid为正在等待*NOHOLDER*GLOBAL*NOTINWAIT*UNKNOWN查看当前用户的sid和serial#selectsid,serial#,......
  • Error creating bean with name 'sqlSessionFactory' defined in class path resource
    项目启动报错原因分析背景:system模块一个月未重启过,今天重启报数据源问题原因:这里报错的原因是数据源配置问题解决:数据源配置在nacos中,拿该模块的nacos数据源配置与项目启动成功的模块的数据源配置进行对比,检查出不同,改为一样即可......
  • C#基础-->cookie和session
    https://www.cnblogs.com/soaeon/p/5604730.html关于cookie和session     cookie      1:一个cookie中可以存放的数据最大在4KB左右      2:cookie存放于客户端       3:cookie分为两种 一种是会话cookie 一种是持久cookie ......
  • 聊聊Zookeeper的Session会话超时重连
    概述简单地说,ZooKeeper的连接与会话就是客户端通过实例化ZooKeeper对象来实现客户端与服务器创建并保持TCP连接的过程。本质上,Session就是一个TCP长连接。会话Session会话的作用:ZKServer执行任何请求之前,都需要Client与Server先建立Session;Client提交给Server的......
  • 彻底搞懂cookie、session、token
    文章目录前言1.cookie2.session3.token3.1为什么要使用token3.2token详解 前言cookie、session、token为了解决什么问题:HTTP是一种无状态的协议,而服务器的业务必须是有状态的。随着在线购物网站、需要登录的网站等等,面临的问题就是要管理......
  • SYN Flood攻击原理,SYN Cookie算法
    SYNFlood是一种非常危险而常见的Dos攻击方式。到目前为止,能够有效防范SYNFlood攻击的手段并不多,SYNCookie就是其中最著名的一种。SYNFlood攻击原理SYNFlood攻击是一种典型的拒绝服务(DenialofService)攻击。所谓的拒绝服务攻击就是通过进行攻击,使受害主机或网络不能提供良好......
  • 基于Session的认证方式
    认证流程基于Session认证方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话),而发给客户端的sesssion_id存放到cookie中,这样用客户端请求时带上session_id就可以验证服务器端是否存在session数据,以此完成用户的合法校验。当用户退出系统或sessi......
  • 关于Cookie Session 和Token,以及应用场景
    关于Cookie和Session(面试经常问)共同之处:cookie和session都是用来跟踪浏览器用户身份的会话方式。关于会话在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。Web应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连......