Cookie 与 Session

原创 2017年10月06日 16:35:28

Cookie 与 Session 的原理。

Session 原理:

session 可以放在文件、内存中或数据库都可以,是以键值对的形式存储。Session
也是一种 key-value 的属性对。
当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户 端的请求里是否已包含了一个 session 标识 - 称为 session id,如果已包含一个 session id 则说明以前已经为此客户端创建过 session,服务器就按照 session id 把这个 session 检索 出来使用(如果检索不到,可能会新建一个,根据 getSession()方法的参数),如果客户 端请求不包含 session id,则为此客户端创建一个 session 并且生成一个与此 session 相关 联的 session id,这个 session id 将被在本次响应中返回给客户端保存。

Session 的客户端实现形式(即 Session ID 的保存方法)

一般浏览器提供了 3 种方式来保存:
[1] 使用 Cookie 来保存,这是最常见的方法,“记住我的登录状态”功能的实现正是基 于这种方式的。服务器通过设置 Cookie 的方式将 Session ID 发送到浏览器。如果我们不 设置过期时间,那么这个 Cookie 将不存放在硬盘上,当浏览器关闭的时候,Cookie 就消 失了,这个 Session ID 就丢失了。如果我们设置这个时间,那么这个 Cookie 会保存在客 户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服 务器上。
[2] URL 重写,就是把 session id 直接附加在 URL 路径的后面,也就是像我们经常看到 JSP 网站会有 aaa.jsp?JSESSIONID=*一样的。
[3] 在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过 GET 方式发送数据,后者使用 POST 方式发送数据。但是明显后者比较麻烦。

就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把 session id 传递回服务器。比如:

<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-1457 88764">
<input type="text"> </form>

session 什么时候被创建?

一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server
端程序(如 Servlet)调用 HttpServletRequest.getSession(true)这样的语句时才会被创建。 session 何时被删除?

session 在下列情况下被删除:

A.程序调用 HttpSession.invalidate()
B.距离上一次收到客户端发送的 session id 时间间隔超过了 session 的最大有效时间 C.服务器进程被停止
再次注意关闭浏览器只会使存储在客户端浏览器内存中的 session cookie 失效,不会 使服务器端的 session 对象失效。
getSession()/getSession(true)、getSession(false)的区别
getSession()/getSession(true):当 session 存在时返回该 session,否则新建一个 session 并返回该对象。
getSession(false):当 session 存在时返回该 session,否则不会新建 session,返回 null。

1.以文件方式存在硬盘空间上的永久性的 cookie。持久 cookie 是指存放于客户端硬盘 中的 cookie 信息(设置了一定的有效期限),当用户访问某网站时,浏览器就会在本地 硬盘上查找与该网站相关联的 cookie。如果该 cookie 存在,浏览器就将它与页面请求一 起通过 HTTP 报头信息发送到您的站点,然后在系统会比对 cookie 中各属性和值是否与 存放在服务器端的信息一致,并根据比对结果确定用户为“初访者”或者“老客户”。

2.停留在浏览器所占内存中的临时性的 cookie,关闭 Internet Explorer 时即从计算机 上删除。
Cookie 的有效期:
Cookie 的 maxAge 决定着 Cookie 的有效期,单位为秒。
如果 maxAge 属性为正数,则表示该 Cookie 会在 maxAge 秒之后自动失效。浏览器会将 maxAge 为正数的 Cookie 持久化,即写到对应的 Cookie 文件中。无论客户关闭了浏览器 还是电脑,只要还在 maxAge 秒之前,登录网站时该 Cookie 仍然有效。下面代码中的 Cookie 信息将永远有效。

// 新建
Cookie cookie = new Cookie("username","helloweenvsfei"); 
// 设置生命周期为 MAX_VALUE
Cookie cookie.setMaxAge(Integer.MAX_VALUE); 
// 输出到客户端
response.addCookie(cookie);

如果 maxAge 为负数,则表示该 Cookie 仅在本浏览器窗口以及本窗口打开的子窗口内有 效,关闭窗口后该 Cookie 即失效。maxAge 为负数的 Cookie,为临时性 Cookie,Cookie 信息保存在浏览器内存中,因此关闭浏览器该 Cookie 就消失了。Cookie 默认的 maxAge 值为–1。
如果 maxAge 为 0,则表示删除该 Cookie。Cookie 机制没有提供删除 Cookie 的方法, 因此通过设置该 Cookie 即时失效实现删除 Cookie 的效果。失效的 Cookie 会被浏览器从 Cookie 文件或者内存中删除,
例如:

// 新建 
Cookie cookie = new Cookie("username","helloweenvsfei");
// 设置生命周期为 0,表示删除该 
Cookie cookie.setMaxAge(0); 
cookie response.addCookie(cookie); 

Cookie 的内容主要包括:名字,值,过期时间,域和路径。
Cookie 的 Expires 属性标识了 Cookie 的有效时间,当 Cookie 的有效时间过了之后, 这些数据就被自动删除了。若不设置过期时间,则表示这个 cookie 的生命期为浏览器会话 期间,关闭浏览器窗口,cookie 就消失。这种生命期为浏览器会话期的 cookie 被称为会 话 cookie(临时性 cookie),会话 cookie 保存在内存里。若设置了过期时间,浏览器 就会把 cookie 保存到硬盘上,关闭后再次打开浏览器,这些 cookie 仍然有效直到超过设 定的过期时间。存储在硬盘上的 cookie 可以在不同的浏览器进程间共享,比如两个 IE 窗口。
Cookie 的域和路径属性一起构成 cookie 的作用范围。 domain 属性可以使多个 web 服务器共享 cookie。
path 指定与 cookie 关联在一起的网页

cookie 可以被人为的禁止,则必须有其他机制以便在 cookie 被禁止时仍然能够把
session id 传递回服务器。
[1] URL 重写,就是把 session id 直接附加在 URL 路径的后面,也就是像我们经常看到
JSP 网站会有 aaa.jsp?JSESSIONID=*一样的。
[2] 在页面表单里面增加隐藏域,这种方式实际上和第 1 种方式一样,只不过前者通过
GET 方式发送数据,后者使用 POST 方式发送数据。但是明显后者比较麻烦。
就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把 session id 传递回服务器。比如:

<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764/>
<input type="text"/>
</form>

Cookie 与 Session 的区别:

1、cookie 数据存放在客户端,用来记录用户信息的,session 数据放在服务器上。 2、正是由于 Cookie 存储在客户端中,对客户端是可见的,客户端的一些程序可能会窥探、 复制甚至修改 Cookie 中的内容。而 Session 存储在服务器上,对客户端是透明的,不存在 敏感信息泄露的危险。
如果选用 Cookie,比较好的办法是,敏感的信息如账号密码等尽量不要写到 Cookie 中。最好是像 Google、Baidu 那样将 Cookie 信息加密,提交到服务器后再进行解密,保 证 Cookie 中的信息只有自己能读得懂。而如果选择 Session 就省事多了,反正是放在服务 器上,Session 里任何隐私都可以。
3、Session 是保存在服务器端的,每个用户都会产生一个 Session。如果并发访问的用户非常多,会产生非常多的 Session,消耗大量的服务器内存。因此像 Google、Baidu、Sina 这样并发访问量极高的网站,是不太可能使用 Session 来追踪客户会话的。
而 Cookie 保存在客户端,不占用服务器资源。如果并发浏览的用户非常多,Cookie 是很好的选择。对于 Google、Baidu、Sina 来说,Cookie 也许是唯一的选择。
4、cookie 的容量和个数都有限制。单个 cookie 的容量不能超过 4KB,很多浏览器都限制 一个站点最多保存 20 个 cookie,而 session 没有此问题。
5、所以个人建议:
将登录信息等重要信息存放到 SESSION 中,其他信息如果需要保留,可以放在COOKIE 中。

session 和 cache 的区别 。

Session 是单用户的会话状态。当用户访问网站时,产生一个 SESSIONID。并存在 于 COOKIES 中。每次向服务器请求时,发送这个 COOKIES ,再从服务器中检索是否 有这个 SESSIONID 保存的数据。而 cache 则是服务器端的缓存,是所有用户都可以访问 和共享的。因为从 Cache 中读数据比较快,所以有些系统(网站)会把一些经常被使用的 数据放到 Cache 里,提高访问速度,优化系统性能。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

session与cookie区别精选

  • 2017-09-12 10:29
  • 20KB
  • 下载

cookie和session

  • 2014-10-16 14:39
  • 14KB
  • 下载

Java Web 内幕学习系列 十、深入理解Session与Cookie

Java Web 内幕学习系列 十、深入理解Session与Cookie 一、理解Cookie Cookie的作用简单来讲就是用户访问服务器之后,服务器会将一些key/value键值对返回给客户浏览...

session与cookie

  • 2015-03-06 16:21
  • 23KB
  • 下载

session和cookie的区别

  • 2014-02-20 18:49
  • 15KB
  • 下载

Cookie和Session漫谈

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

cookie与session的区别

  • 2014-06-16 13:45
  • 19KB
  • 下载

Session与Cookie区别

Session与Coolie区别: Session:服务器端技术。(Cookie:客户端技术)在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一...

状态管理cookie/session

  • 2013-09-12 10:19
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)