• 深入理解session,cookie


    session:存放在服务器端记录用户登录状态的一次会话,例如你从浏览器打开一个网页开始,到关闭浏览器的这个过程,就是一次会话。
    cookie:网站为了辨别标识用户身份,进行session跟踪,而存储在用户本地终端上的数据。
    为何要进行session跟踪??
    首先了解http协议的无状态性,无状态的含义:http协议是应用层的协议建立在tcp协议的基础上,一次http通信会建立一个tcp连接。而无状态就是一次通信建立连接,得到响应,就关闭。你接下来继续请求时,服务器端没有记录你的任何数据。
    例如:你登录一个网站,登录发送一次http请求,建立tcp连接,响应登陆成功(进入主页),tcp连接关闭。接下来你想查看我的信息,结果服务器没记录你的任何信息,这样,就进行不下去。
    如何解决一个无状态的协议关联两次连续的请求,保持http连接??
    引入了一种session跟踪技术(1.配合cookie使用。2.url重写)
    <1>配合cookie使用。
    1、用户第一次发送http请求(用户登录等),服务器建立session会话,创建session信息,并记录下来,创建一个session的·唯一标识。响应请求,并将这唯一标识写入响应:
    Set-cookie:name=name;expires=date;
    sessionid=sessionid;path=path;domain=domain;
    2、浏览器解析响应,得到sessionid,并将其写入本地cookie中,接下来,用户继续发送请求,并将cookie(里面有sessionid)发送给服务器,服务器获得sessionid,根据sessionid就可查看其服务器端保存的那个用户的具体session信息。

    <2>url重写,就是每次请求都在url末尾附上jsessionid=xxx这样,每次请求的时候就能获得sessinid,然后再根据sessionid判断是否已存在该session(存在,与request绑定),不存在,创建。

    注意:无论哪种方式,浏览器每次发送请求时,都要讲sessionid发送给服务器。

    例子:
    Servlet/jsp容器在封装HttpServletRequest对象时根据cookie或者url中是否存在sessionid来决定是绑定当前的session到HttpRequest还是创建新的session对象(在请求解析阶段发现并记录sessionid,在Request对象创建阶段将session绑定);

    对于一个高访问量的网站,多个用户建立太多session影响系统性能的处理。
    1.设置session超时。(session.invalidate())
    2.将session写入服务器端的本地磁盘。
    3.
    session与cookie的应用。
    1. 应用场景
    Cookie的典型应用场景是Remember Me服务,即用户的账户信息通过cookie的形式保存在客户端,当用户再次请求匹配的URL的时候,账户信息会被传送到服务端,交由相应的程序完成自动登录等功能。当然也可以保存一些客户端信息,比如页面布局以及搜索历史等等。
    Session的典型应用场景是用户登录某网站之后,将其登录信息放入session,在以后的每次请求中查询相应的登录信息以确保该用户合法。当然还是有购物车等等经典场景;
    2. 安全性
    cookie将信息保存在客户端,如果不进行加密的话,无疑会暴露一些隐私信息,安全性很差,一般情况下敏感信息是经过加密后存储在cookie中,但很容易就会被窃取。而session只会将信息存储在服务端,如果存储在文件或数据库中,也有被窃取的可能,只是可能性比cookie小了太多。
    Session安全性方面比较突出的是存在会话劫持的问题,这是一种安全威胁,这在下文会进行更详细的说明。总体来讲,session的安全性要高于cookie;
    3. 性能
    Cookie存储在客户端,消耗的是客户端的I/O和内存,而session存储在服务端,消耗的是服务端的资源。但是session对服务器造成的压力比较集中,而cookie很好地分散了资源消耗,就这点来说,cookie是要优于session的;
    4. 时效性
    Cookie可以通过设置有效期使其较长时间内存在于客户端,而session一般只有比较短的有效期(用户主动销毁session或关闭浏览器后引发超时);
    5. 其他
    Cookie的处理在开发中没有session方便。而且cookie在客户端是有数量和大小的限制的,而session的大小却只以硬件为限制,能存储的数据无疑大了太多。

  • 相关阅读:
    selenium操控浏览器
    DOM
    bug记录
    log日志
    linux 搭建 telnet + tftp
    linux 搭建 MeepoPS+Socket
    php常见面试题(2)
    php常见面试题(1)
    laravel 5 支付宝支付教程
    计算机进位制原理
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551235.html
Copyright © 2020-2023  润新知