一、理解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. c# ftp 上传文件 与 下载文件

    接着上一篇说. 上一篇说了根据配置文件获取路径,并判断路径在服务器中是否存在.如果不存在则在服务器中建立一个. 然后就是往路径下面传输文件了.. 代码: //连接ftp private void Co ...

  2. c# ?和??

    先看如下代码: string strParam = Request.Params["param"]; if ( strParam== null ) {     strParam= ...

  3. java中如何实现两个值互换

    public class SwapVariable { public static void main(String[] args) { // 将两个数据进行交换: method2(,); metho ...

  4. C++ std::unordered_multiset

    std::unordered_multiset template < class Key, // unordered_multiset::key_type/value_type class Ha ...

  5. hdu 1686 KMP算法

    题意: 求子串w在T中出现的次数. kmp算法详解:http://www.cnblogs.com/XDJjy/p/3871045.html #include <iostream> #inc ...

  6. 使用UrlRewriteFilter对url进行更替

    一般来说,使用struts之后url的访问实际上访问的是action的地址,为了不让该地址暴露给别人,可以采用UrlRewriteFilter来对url进行重写. 首先,在web.xml里面配置: & ...

  7. https hsts 私密链接

    chrome强制转跳https,删除对某个域名的强制转跳即可 hrome的地址栏输入:chrome://net-internals/#hsts   在Delete domain下输入相对应的网址,不带 ...

  8. 看图说说JVM内存

  9. innerText兼容性问题

    /* text方法,给网页元素设置文本值的方法 主要处理火狐不支持innerText这个属性的问题. 还学习了如何判断一个字符串类型的属性是否存在 如果判断一个对象类型的属性是否存在,用if(ele. ...

  10. 实用的chrome插件

      有人说Chrome是世界上最好的浏览器,当然也会有不赞同.但不论怎样,工具而已,何必限制,任何一个用好了都能迅速提高我们的效率,不过还是推荐Chrome. 自然问题就变成:“为什么要用Chrome ...