zoukankan      html  css  js  c++  java
  • session理解与总结【session原理、应用、与cookie区别】

    session原理

    session也是一种记录浏览器状态的机制,但与cookie不同的是,session是保存在服务器中。

    由于http是无状态协议,当服务器存储了多个用户的session数据时,如何确认http请求对应服务器上哪一条session,相当关键。这也是session原理的核心内容。

    • 解决方法:服务器向客户端发送一条名为JESSIONID的cookie,它的值是session的id值。通过JESSIONID可以识别http请求对应哪一个用户。原理图如下所示:
      image

    session相关应用

    与cookie共同使用

    问题来源:session自动 维护的cookie的maxAge值为-1,这导致,浏览器关闭之后,存储JESSIONID的cookie会消失,服务器接收不到sessionid,session便会失效。

    • 解决方法:与cookie共同使用。手动创建名为JESSIONID的cookie,通过session.getId()获取sessionid,存入cookie,并设置maxAge。

    代码如下:

    Cookie cookie = new Cookie("JSESSIONID",session.getId());
    cookie.setMaxAge(30*60);
    cookie.setPath("/"); // 必须是根路径
    response.addCookie(cookie);
    

    经过实践,这样做有效。重启浏览器后,session依然可用。

    防止表单重复提交

    业务场景(重复提交的危害)

    • 在投票的网页上不停地提交,实现了刷票的效果;
    • 注册多个用户,不断发帖子,扰乱正常发帖秩序。

    解决方法

    • 在session中存储一个token,专业做法是使用随机数或者时间戳;
    • 前端获取得到这个token,并将token写入表单的隐藏域中;
    • 在第一次提交表单时,判断seesion有没有值,如果有就比对token。对比正确后处理请求,然后删除session中的数据;
    • 再次访问的时,session是空的,即避免了重复提交;

    一次性验证码

    目的:防止暴力破解密码

    实现方法

    • 初次访问时,服务端生成随机数,存入session域中,并生成验证码图片传给前端;
    • 表单填写完毕后,post请求服务器;
    • 后端读取参数中传递的验证码值,读取session域中的随机数值,验证两者是否相等。

    session与cookie的区别

    • 存储
      • Cookie只能存储字符串,若要存储非ASCII字符,还需要对其编码;
      • Session可以存储任何类型数据。
    • 隐私
      • Cookie内容对客户端可见;
      • Session对客户端不可见。
    • 有效期
      • Cookie通过maxAge设置有效时间;
      • Session通过maxInactiveInterval属性设置有效时间;除此之外,存储JESSIONID的cookie有效期与session息息相关。
    • 对服务器的负担
      • Session是保存在服务器的,每个用户都会产生一个Session,如果是并发访问的用户非常多,是不能使用Session的,Session会消耗大量的内存;
      • Cookie是保存在客户端的。不占用服务器的资源。像baidu、Sina这样的大型网站,一般都是使用Cookie来进行会话跟踪。
    • 浏览器的支持
      • 浏览器有权选择是否禁用cookie;
      • 若禁用cookie,session可以通过URL地址重写来进行会话跟踪。
    • 跨域名上
      • Cookie可以通过设置domain属性来实现跨域名;
      • Session只在当前域名内有效。

    本文和上一篇cookie博客主要来源与对以下技术博客的学习,当然不乏自己的思考、实践和提炼。

  • 相关阅读:
    BOI 2002 双调路径
    BOI'98 DAY 2 TASK 1 CONFERENCE CALL Dijkstra/Dijkstra+priority_queue/SPFA
    USACO 2013 November Contest, Silver Problem 2. Crowded Cows 单调队列
    BOI 2003 Problem. Spaceship
    USACO 2006 November Contest Problem. Road Blocks SPFA
    CEOI 2004 Trial session Problem. Journey DFS
    USACO 2015 January Contest, Silver Problem 2. Cow Routing Dijkstra
    LG P1233 木棍加工 动态规划,Dilworth
    LG P1020 导弹拦截 Dilworth
    USACO 2007 February Contest, Silver Problem 3. Silver Cow Party SPFA
  • 原文地址:https://www.cnblogs.com/buptleida/p/12312241.html
Copyright © 2011-2022 走看看