web中什么是会话???
用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。
一.Cookie
在网站中,http 请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器,服务器依然不能知道当前请求是哪个用户发送过来的。cookie的出现就是为了解决这个问题,第一次 登录后服务器返回一些数据(cookie) 给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用.户是哪个了。cookie存 储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量 的数据。只能存储 String 类型的对象。Cookie可以通过 setMaxAge设置有效时间,即使浏览器关闭了仍然存在。
二.Session
session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端, 就是会占用服务器的资源,但现在服务器已经发展至今,存储一些session信息还是绰绰有余的。Session过多时会消耗服务器资源,大型网站会有专门Session服务器。能够存储任意的 java 对象。关闭网页Session就结束了。
原理:
存储在服务器端,通过cookie存储一 个session _ id, 然后具体的数据则是保存在session中的。如果用户已经登录,则服务器会在cookie中保存一个session_ id,下次再次请求的时候,用户会通过Cookie 把该session._ id携带上来,服务器根据ssion_ id在session库 中的位置,从而获取与用户相关的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。
当你第一次访问服务器的时候,服务器会在内存中开辟一块空间,返回唯一一把可以打开该空间的钥匙,然后再把这把钥匙返回到浏览器。当你第二次访问服务器的时候,浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间已经被销,服务器f又重新开辟一块新的空间,返回新的钥匙到浏览器。
三.两者的区别
1、数据存放位置不同:
cookie数据存放在客户端的浏览器上,session数据存放在服务器 上。
2、安全程度不同:
cookie不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗,考虑到安全应当使用Session。
3、性能使用程度不同:
Session 会在一定时间内保存在服务器上。当访问量增多时, 比较占用你的服务器性能,考虑到减轻服务器性能方面,应当使用Cookie.
4、数据存储大小不同:
单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie,而Session则存储与服务器端,浏览器对其没有限制。
有效期上不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
5、有效期上不同:
开发可以通过设置Cookie的属性,达到使Cookie长期有效的效果。Session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该Session就会失效,因而Session不能达到长期有效的效果。
四.Cookie和Seesion的出现原因?
Http是一个无状态的协议,就是说这一次请求和 上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的好处是快速。坏处是需要进行用户状态保持的场景时,必须使用一些方式或者手段比如: session 和cookie,用来保持用户状态。
五.出现问题
本地禁止cookie,Session 还能使用吗?
经过上面的学习,我们能看出来,要使用session, 其实还是需要使用cookie机制来保存session _ id的,那么万一在客户端cookie机制被禁掉了,那session貌似也就无法使用了?其实替代方法是有的:
经常被使用的一种技术叫做URL重写,就是把session_ id直接附加在URL路径的后面,比如放在查询字符串中。
六.使用场景
Cookie常见的应用场景是:自动登录的
Cookie是浏览器保存信息的一种方式,可以理解为一个文件,保存到客户端了。你可以给这个文件设置一个期限,这个期限呢,不会因为浏览器的关闭而消失啊。其实大家应该对这个效果不陌生,很多购物网站都是这个做的,即使你没有买东西,他也记住了你的喜好,现在回来,会优先给你提交你喜欢的东西。
Session常见的应用场景是:会话
session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征表明他就是张三。session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。