zoukankan      html  css  js  c++  java
  • Cookie与Session

    HTTP是一种不保存状态的协议,也就是无状态协议。Http自身不对请求和响应之间的通信状态做出保存,也就是说在在HTTP这个级别,协议对于发送过的请求和响应都不做出保存。

    事实上:由于通常一台服务器会服务于几万个甚至更多的客户(客户端),如果把所有的客户端信息都记录下来,那么会大大增加服务器的压力,HTTP协议是无状态的,也就意味着服务器没法记住某个客户发出的请求和做出的响应,这样的话客户下一次再次请求时,服务器也无法识别这个客户,因此又会做出新的响应。比如登录时,客户明明已经登录过了,但是跳转到网站的其他页面,由于是服务器是无状态的服务器还得请求一次。为了实现期望的保持状态功能,于是引入了cookie技术。

    Cookie是保存在客户端的小段文本,随着客户端每一个请求发送该url下的所有cookies到服务器端。

    cookies_1.png

    Cookie的详细工作流程如下:cookie_0.png

    1、第一次请求时,浏览器中是没有cookie信息的。

    cookies_2.png

    2、服务器接收到请求后,会首先检查是否存在Cookie,如果没有Cookie,会生成一个Cookie。在响应头中Set-Cookie中生成Cookie信息。生成的Cookie文本中,存在一个sessionId,服务器会记录下来这个sessionId。

    cookies_3png.png

    3、客户端再次请求时,浏览器会自动将Cookie信息添加到请求头上,服务器接到请求会根据sessionId来判断身份。

    cookies_4png.png

    Session

    Session保存在服务器端(在服务器端生成),通过唯一的sessionId来区别每一个用户。sessionId随每个请求发送到服务器(sessionId实际上是Cookie中的一个字段),Session实际上是一个保存在服务器的数据表,每一个sessionId对应一个用户。通过Cookie获取到SessionId,然后再通过session的key获取session值。

    session_id.png

    思考:如果不使用Cookie能不能实现维持会话?

    仔细分析Cookie的功能,我们使用Cookie最重要的就是保存了一个sessionId然后每次请求时,在请求头中携带过去。如果没有了Cookie,那么我们可以不可以通过其他的手段把这个sessionId发送到服务端,并通过其他手段再吉首这个sessionId。比如我们可以通过在Url后面添加上sessionId,这样的话服务器端也能获取到sessionId,然后 服务端再将sessionId返回回来,客户端再进行保存。这样的话也能够实现类似于Cookie的功能,但是这样不太安全,因为sessionId直接在Url后面是可见的,很容易就被模仿了。也存在一个方法提高安全性,那就是服务器产生一个tooken,每请求一次tooken发生变化,tooken只能使用一次,这样也能提高安全性。

  • 相关阅读:
    R语言 ggplot2包
    C++实现景区信息管理系统
    linux系统目录介绍
    Python中的赋值、深拷贝与浅拷贝(内存地址)
    三大相关系数: pearson, spearman, kendall(python示例实现)
    Xshell删除键不好使:删除显示退格^H
    Spark SQL中出现 CROSS JOIN 问题解决
    Python apply函数
    Python Dataframe 分组排序和 Modin
    Python 中的时间处理包datetime和arrow
  • 原文地址:https://www.cnblogs.com/yinhaiying/p/11994043.html
Copyright © 2011-2022 走看看