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>

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 里,提高访问速度,优化系统性能。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值