HTTP 是种无状态的协议,即使用 HTTP 协议时,每次发送请求都会产生对应的新响应,协议本身不会保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成简单化。随着 Web 的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。为了实现管理状态,便引入了 Cookie 技术和 Session 机制。

Session 与 Cookie 的主要区别在于:Session 机制是在服务端保持用户状态,而 Cookie 机制是在客户端保持用户状态。由于采用服务端保持用户状态也需要在客户端保存一个 session 的标识,而这通常是 Cookie 机制实现的。这过程大致如下:

用户登录成功后,服务端将用户的登录状态保存在 session 中,同时将 sessionID 通过 cookie 返回至客户端。用户在之后的请求将带有 sessionID 的 cookie 发送至服务端,服务端通过 sessionID 取出 session,得到用户的登录状态。

会话劫持

既然通常是通过 cookie 来维持会话的,那么如果 cookie 被窃取,攻击者就可以劫持会话,合法地登录用户账户。

Q & A

Q: 浏览器关闭后,session 就会被销毁吗?

A: 不是。session 是在服务端管理的,浏览器关闭时并不会主动去通知 Web 服务器,所以服务器无法得知浏览器何时关闭,更不会再浏览器关闭时去销毁 session。之所以有 “浏览器关闭后,session 会被销毁" 的错觉,是因为大部分的 Session 机制都使用会话 cookie 来保存 sessionID,而浏览器关闭时,这个 sessionID 便被删除,当再次向服务器发送请求时就无法找附带原来的 sessionID,服务器收到请求时也无法找到原来的 session。如果保存 sessionID 的 cookie 被保存在硬盘上,或者使用其他方法在客服端发送请求时,将原来的 sessionID 附上,那么服务器接收到请求时,仍然可以找到原来的 session。正是 HTTP 客户端的关闭不会导致 session 被销毁,服务器才为 session 设置了一个失效时间,当 session 被闲置的时间超过了失效时间,服务器便认为客户端已经停止了活动,将 session 销毁以节省内存资源。

HTTP - Session 机制的更多相关文章

  1. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  2. Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  3. redis+cookies实现session机制(解决 手机浏览器不自动回传cookies导致session不可用问题)

    昨天在手机端测试自己的项目遇到如下情况. 1.在手机上(苹果qq浏览器),登陆时存在session中的图片验证码结果,一直获取不到,考虑是cookies的问题.但是其他网站有貌似可以正常使用cooki ...

  4. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  5. PHP中的SESSION机制

    [转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧.   c ...

  6. session机制详解以及session的相关应用

    session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...

  7. Cookie/Session机制

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  8. [转]Cookie/Session机制详解

    原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用 ...

  9. 转:理解Cookie和Session机制

    原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...

  10. SESSION机制

    一:Session与Cookie Session:在服务器端创建并存放在服务器的内存中的,Session的内容存储是键值对的列表,格式:名称 | 类型:长度:值 Session的生命周期:在php.i ...

随机推荐

  1. Java学习笔记(一):数据类型与变量

    数据类型 Java中存在2种数据类型,下面我们来详解一下: 基本数据类型: 引用数据类型: 可以用一张表来记录: 基本数据类型 整型 byte:1个字节8位,取值范围为:[-128, 127],直接写 ...

  2. Enterprise Library 服务问题

    在使用Enterprise Library而没有注册服务的时候会出现这样的问题,"Editing Post "Failed to create instances of perfo ...

  3. map的两种取值方式

    public class MapUtil{ public static void iteratorMap1(Map m) { Set set=m.keySet();//用接口实例接口 Iterator ...

  4. Node.js Crypto 加密算法库

    Crypto库是随Nodejs内核一起打包发布的,主要提供了加密.解密.签名.验证等功能.Crypto利用OpenSSL库来实现它的加密技术,它提供OpenSSL中的一系列哈希方法,包括hmac.ci ...

  5. 【不积跬步,无以致千里】DELETE SINGLE IPTABLES RULES

    You can delete them based on what they’re doing: iptables -D INPUT -s 127.0.0.1 -p tcp --dport 111 - ...

  6. [AngularJS] ngModelController render function

    ModelValue and ViewValue: $viewValue: Actual string value in the view. $modelValue: The value in the ...

  7. 最简单的视频编码器:编译(libx264,libx265,libvpx)

    ===================================================== 最简单的视频编码器系列文章列表: 最简单的视频编码器:编译 最简单的视频编码器:基于libx ...

  8. 利用nf_conntrack机制存储路由,省去每包路由查找

    IP是无连接的,因此IP路由是每包一路由的,数据包通过查找路由表获取路由,这是现代操作协议协议栈IP路由的默认处理方式.可是假设协议栈具有流识别能力,是不是能够基于流来路由呢?答案无疑是肯定的. 设计 ...

  9. 从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改写为大写字母。

    #include<iostream> #include<vector> #include<string> using namespace std; int main ...

  10. laraval框架model注意事项

    今天创建了一个model,名字叫做Role_Users.php,结果运行的时候死活不识别,后来发现去掉名字中的下划线就可以识别了,虽然解决了,但还是不明白原理,若有大神看到但求解答