一、理解Cookie

  由于http是一种无状态的协议,当用户的一次访问结束后,后端的服务器就无法知道下一次来访问的请求是不是上一次的用户了。那么Cookie的作用就是用户通过http访问一个服务器时,这个服务器会将一些Key/Value属性返回给客户端浏览器,并且给这些数据加上一定的限制条件,在符合条件的情况下客户端下一请求再带着这些数据来访问服务器,那么这些数据又被完整的带回来了,此时服务器就可以根据这些数据判断是否是同一个用户访问了。

Cookie的属性项

属性项 简介
NAME=VALUE 存放键值对,需要注意的是这设置的NAME不能和其他属性项同名。
Expires 过期时间,过了设置的时间点后,Cookie就会失效
Domain 生成Cookie的域名,如"Domain=baidu.com"
Path Cookie生成的路径,如path=/stu-manager
Secure 如果设置了这个属性,那么只有在ssh连接时才能回传Cookie

Cookie如何工作

  Cookie是怎么加到Http的Header中的?当我们在程序使用HttpServletResponse.addCookie()后,在Tomcat容器中会将这个Cookie的信息往上传递,知道org.apache.catalina.connector.Response,调用方法addCookie,再次方法中又调用了 generateCookieString() 方法生成了关于的Cookie的字符串,再调用addHeader方法将Cookie信息写到响应头的,时序图如下:

源代码:

    public void addCookie(final Cookie cookie) {

        // Ignore any call from an included servlet
if (included || isCommitted()) {
return;
} // 添加到 cookies列表中
cookies.add(cookie); // 关于cookie信息的字符串
String header = generateCookieString(cookie);
//if we reached here, no exception, cookie is valid
// the header name is Set-Cookie for both "old" and v.1 ( RFC2109 )
// RFC2965 is not supported by browsers and the Servlet spec
// asks for 2109.
// 添加到响应头
addHeader("Set-Cookie", header, getContext().getCookieProcessor().getCharset());
}

使用Cookie的限制

  Cookie是HTTP头中的一个字段,虽然HTTP本身对这个字段没有要求,但是Cookie最终是存放在浏览器中,所以不同浏览器对Cookie的限制虽然不同,但总是有限制的

二、理解Session

  Cookie可以让服务端跟踪每个客户端的访问,但是每次客户端的访问都带着Cookie,如果访问量很大的时候,那么就会增加大量网络传输。而Session就是为解决这个问题的。客户端每次访问服务器时,不需要每次都回传一个完成的Cookie,只需要传一个ID。这个ID是客户端第一次访问服务器时随机生成的,唯一的。它包装在一个叫做JSESSIONID的Cookie中回传。(禁用Cookie时使用URL重写的方式回传)

Session如何工作

有了SessionID,我们就可以通过Request创建Session了。

三、Cookie的安全问题

  Cookie和Session'都可以跟踪客户端的访问记录,但是他们的工作方式全然不同,Cookie将所有要保存的数据通过服务端传到客户端,客户端再将其保存到浏览器中,所以这些Cookie信息可以被我们看到,甚至可以修改,所以Cookie的安全级别并不高。但是Session的安全性就要高很多了,因为Session将数据存放在服务端,在客户端存储的只是一个SessionID而已。另外Session的大小虽然没有限制,但是它是存放在服务端的,从性能考虑,也不宜存放太多数据。

[web]深入理解Session和Cookie的更多相关文章

  1. 理解Session与Cookie

    写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...

  2. 转!!深入理解 Session 与 Cookie

    摘要 Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简 ...

  3. 深入理解 Session 与 Cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  4. 【转】深入理解 Session 与 Cookie

    Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简单又复 ...

  5. 理解session和cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  6. 第10章 深入理解Session与Cookie

    需要很多Cookie时,考虑HTTP对Cookie数量和大小的限制. 几百或更多台服务器的时候,如何解决Session在多态服务器之间共享的问题. 还有一些安全问题,如Cookie被盗,Cookie伪 ...

  7. 深入理解Session和Cookie机制

    具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而 ...

  8. 深入理解Session与Cookie(一)

    Session,Cookie简介: Session和Cookie的作用都是为了保持用户与后端服务器的交互状态,但是各自都有缺陷: Cookie: 随着Cookie的个数的增多和访问量的增加,它占用的网 ...

  9. web 开发常见问题--Session 与 Cookie 却别

    总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...

随机推荐

  1. Oracle-属性查询

    1. 查询表的部分字段属性 select t.*, c.comments from user_tab_columns t, user_col_comments c where t.table_name ...

  2. qy Undefied index报错

    目测是不支持如下写法 $value['status'] = $map[$value['status']];

  3. System.Reflection.Emit摘记

    动态类型在.net中都是用什么类型来表示的.程序集:System.Reflection.Emit.AssemblyBuilder(定义并表示动态程序集)构造函数:System.Reflection.E ...

  4. 谈谈Vue.js——vue-resource全攻略

    本篇文章主要介绍了谈谈Vue.js——vue-resource全攻略,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧   概述 上一篇我们介绍了如何将$.ajax和Vue. ...

  5. 白盒测试实践-任务进度-Day01

    12-05 任务安排 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 任务划分 任务1:依据白盒测试方法设计测试用例 说明:我们小组就不使用测试管理工具了,直接用excel文件的形式记录,具 ...

  6. 06 Counting Point Mutations

    Problem Figure 2. The Hamming distance between these two strings is 7. Mismatched symbols are colore ...

  7. mybatis 简单实现 left join

    sql -- 表a ta (id,aname,bid) -- 表b tb (id,bname) SELECT T1.*, T2.BNAME FROM TA T1 LEFT JOIN TB T2 ON ...

  8. 启动Hadoop HDFS时的“Incompatible clusterIDs”错误原因分析

    "Incompatible clusterIDs"的错误原因是在执行"hdfs namenode -format"之前,没有清空DataNode节点的data目 ...

  9. MySQL的下载和安装

    MySQL的下载 MySQL官网:https://www.mysql.com/ MySQL的安装 https://jingyan.baidu.com/article/6181c3e0d27a57152 ...

  10. gulp-usemin 插件使用

    关于什么是gulp,它和grunt有什么区别等问题,这里不做任何介绍.本文主要介绍如何使用gulp-usemin这款插件,同时也会简单介绍本文中用到的一些插件. 什么是gulp-usemin 用来将H ...