Cookie和Session之间的区别与联系

摘要:

  Cookie 与 Session 是很常用的实现Http状态的技术,在不断的使用中,自己也对其有所理解。我接下来的讨论,是基于下面的顺序:

1、为什么要使用 Cookie 和 Session

  由于 Http 协议的请求过程,是基于 TCP/IP 的,当客户端请求服务器,服务器处理后,进行响应,这个过程是无状态的。在有些时候,是需要保存一些客户端的请求信息,识别客户端的某些状态,智能的、有针对性的去分析某些客户端的习惯。这些时候,就需要去记录客户端的连接状态,识别请求的状态等。为了解决类似的事情,就需要使用到了 Cookie 和 Session。

2、Cookie 和 Session 的具体知识

  (1)Cookie:在客户端访问某个地址时,会将请求交到服务器进行处理,在发送请求的时候,浏览器会将页面的头部信息一并的交到服务器端进行处理。在处理的过程中,Cookie 在服务器端生成 ,在此同时,可以将一些需要保存的信息,存放到此 Cookie 中。生成 Cookie 对象时,需要确定具体的名称及具体的值,可以设置当前 Cookie 的过期时间,设置过期时间后,就相当于持久化了 Cookie 中的数据,此时的 Cookie 会以之前的 Cookie 名称,保存在客户端。

  如果不设置过期时间,则当前 Cookie 的生命期是浏览器会话期间,一旦关闭了该浏览器,当前的Cookie 就会不存在了,此时的 Cookie 信息是保存在内存中。在服务器端,处理完后,会将生成的 Cookie ,随着 Http 响应,会在 Http 响应头中,加上Cookie 信息,浏览器接受到响应后,会按照 Http 响应头里的 Cookie ,在客户端建立 Cookie 。在下次客户进行请求的时候,Http 会附带着已经存储过的 Cookie,一并发送到服务器。一个域,在客户端建立的所以 Cookie 都是可以共享的,只要 Cookie 没有过期。

  (2)Session:Session 是在服务器端生成的,存储在服务器端,即存在内存中。可以对生成的 Session 设置过期时间,如果不设置过期时间,默认的 Session 过期时间是30 分钟(在不同的服务器中,它的过期时间略有不同,本文是以 Tomcat 来说的)但是,Sesssion 的生成的同时,会生成一个与之相关联的的 SessionID ,此 SessionID的存储是需要 Cookie 来完成的。 SessionID 是以名称为 JSESSIONID,其值应该是一个既不会重复,又不容易被找到规律以仿造的字符串。SessionID会随着此次 Http 响应,一并返回到客户端,并保存在客户端中。到当前请求再次发出后,该 SessionID会随着 Http 头部,传到服务器中,服务器依据当前 SessionID 得到与之对应的 Session.

  其中:通过 Cookie 的方式存储 Session 状态,只是其中一种方式。如果客户端禁用了 Cookie 的话,很多网站任然可以存储用户的信息。一种处理的方式是URL 重写,将 SesseionID 直接附加在请求地址的后面。另一种处理的方式是,使用隐藏自动的方式。就是服务器自动的在表单中,添加一个隐藏字段,以便在表单提交时,将 SesseionID 一起传到服务器,进行识别。

3、Cookie 和 Session 的具体使用

  最近,我在写一个代码生成器的时候,我希望在我填写完数据库连接信息后,浏览器帮我把这些信息保存起来,以免每次我需要使用的时候,都去填写,浪费时间。下面是我具体的做法:

/**

* 存储数据库连接对象

* @param database 数据库连接对象

* @param request http 请求对象

* @param response http 响应对象

* @param jonArray 数据库中的所有表和 JSONArray 对象

* @return null 空

*/

private String storeDatabaseInfo(Database database,

HttpServletRequest request, HttpServletResponse response,

JSONArray jonArray) {

/*

* 判断:

* (1)如果 session 存在并且存储过 database 数据,则不再进行重复保存

* (2)如果,没有,则将数据存储到 Session 中

*/

HttpSession session = request.getSession(false);

if(session != null && session.getAttribute("database") != null){

//(1)如果 session 存在并且存储过 database 数据,则不再进行重复保存

log.info("当前回话已经保存过 databse 的数据了,不再进行重复的保存!");

}else{

//(2)如果,没有,则将数据存储到 Session 中

session.setAttribute("database", database);

session.setMaxInactiveInterval(60*60);

}

/*

* 判断:

* (1)如果 request 中保存过,则不再进行重复保存

* (2)如果,没有,则将数据存储到 Cookie 中

*/

Cookie[] cookies = request.getCookies();

if((cookies != null)){

for (Cookie cookie : cookies) {

if (cookie.getName().equals("database")) {

log.info("当前Cookie 中,已经保存过 databse 的数据了,不再进行重复的保存!");

//(1)如果 request 中保存过,则不再进行重复保存

return jonArray.toString();

}

}

}

//(2)如果,没有,则将数据存储到 Cookie 中

String databaseInfoStr = database.getDatabaseType() + "_" + database.getUrl() + "_" +

database.getPort() + "_" + database.getUser() + "_" +

database.getPassword() + "_" + database.getDatabaseName() + "_" + database.getTable();

Cookie databaseInfo = new Cookie("database", databaseInfoStr);

databaseInfo.setMaxAge(60*60);//设置 Cookie 的过期时间

databaseInfo.setHttpOnly(true);                 //设置 Cookie 的使用协议

databaseInfo.setPath("/CodeGenerator/");//设置 Cookie 的使用域

response.addCookie(databaseInfo);

return null;

}

  其中:特别注意的是,在生成 Cookie 后,如果不设置当前 Cookie 的使用,无论有没有设置 Cookie 的过期时间,当下次访问的时候,都是获取不到该名称对应的 Cookie 的。如果设置databaseInfo.setPath(“/”)使用在全局的环境中,所有的请求都可以使用该 Cookie , 如果设置和项目相关的域,如:databaseInfo.setPath(“/CodeGenerator/”),在只会在当前项目的访问下使用当前 Cookie 。

(4)Cookie 和 Session 的区别

  首先,Cookie 是存储在客户端的,Session 是存储在服务器端的。

  其次,在保存相对安全性低的信息时候,可以考虑使用 Cookie,在相对安全性要求高的信息时候,可以考试使用 Session。毕竟 Cookie 存在客户端,其他人可以查找并分析的。

  最后,在对性能要求高的时候,不适合使用 Session 的,因为 Session 会一直存在服务器的,直到当前 Session 过期,而且 Cookie 存储是字符串类型的信息,而 Session 可以存储任何形式的信息,Session 也不存在访问域的限制。

个人觉得,在存储相对持久的信息时,应考虑使用 Cookie,因为 Cookie 可以以文件的形式,存储在客户端。在进行一些登录的验证及信息拦截的时候,可以使用 Session。

原文链接:http://mp.weixin.qq.com/s?__biz=MjM5OTM4NDMyMg==&mid=200647607&idx=2&sn=1a56de4f111536efd04e935937c0262f&scene=1&srcid=1109mnfaXHwVjs034sl6j9dl&key=d4b25ade3662d64319456fb6fc86a8dec6429a4b39cf3b5c1d05539c93252199cf0ce4dabbc839e6572f83c13c866a74&ascene=1&uin=MTI5MDA0NDAwOA==&devicetype=webwx&version=70000001&pass_ticket=rkUvnKLHHx68SBODTvdAr0MLZ4dBLR8CpkbBXUyRVAoKMsTGTcHpD5jI2s2rl02g

时间: 2024-10-13 11:51:57

Cookie和Session之间的区别与联系的相关文章

php 会话控制(了解cookie与session之间的区别与联系)

相同点: 都可以在解决HTTP无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存,设置信息,并且在请求事物之间建立联系. 不同点: 简单的说cookie的信息保存在客户端,session的信息保存在服务器端. Session采用键值对,也就是说ID存放客户端,而值放在服务器端,是通过用户的ID去找服务器上对应的值,这种方式值放置在服务器端,有个时间限制,时间到则服务器自动回收/释放. Cookies则有两种方法,一种方法是把值保存在浏览器的变量中,当浏览器关闭时结束,另一种方法是保存在

Cookie和Session简介与区别

1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 Session来跟踪和判断. 区别 Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪 Cookie是完全保持在客户端的如:IE firefox 当客户端禁止cook

(进阶篇)浅谈COOKIE和SESSION关系和区别

COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 1.设置Cookie PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int exp

Cookie和Session的的区别

前些天学习了Cookie和Session,我以对比的方式来简单说下两者的区别: 什么是Cookie? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递.Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息. 什么是Session? Session一般译作会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待session,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成

前端页面——Cookie与Session有什么区别

我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录,而且有的网站还提供购物车的功能.这些简单实用的功能就是通过Cookie与Session实现的,接下来,让我们一起探讨一下它们是如何运行的. 1.概念 Cookie 有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). Se

COOKIE和SESSION关系和区别等

一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 1.设置Cookie PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int e

COOKIE和SESSION关系和区别

一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 1.设置Cookie PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int e

COOKIE和SESSION有什么区别?

作者:知乎用户链接:https://www.zhihu.com/question/19786827/answer/28752144来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这

Cookie和Session有什么区别

1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识别具体的用户,这个机制就是Session. 典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书.这个Session是保存在服务端的,有一个唯一标识.在服务端保存Session的方法很多,内存.数据库.文件都有.集群的时候也要考虑Session的转移,