一.cookie,session,token,jsp
1.cookie
1.1 背景
cookie出现的背景其实是,在每一次http协议进行对话的时候(对话的意思其实就是用户访问一次服务端,也就是用户打开一次浏览器进行一次访问),http是无状态协议,我们没法知道这段对话的状态,也就是对话是否在进行,谁和谁在对话,对话多久了这些信息,所有我们就是需要一个东西来实现这个状态的监控。
Web应用程序使用HTTP协议传输数据,HTTP超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,并且HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。并且理论上,一个用户的所有请求操作都应该属于同一个会话。要跟踪该会话,必须引入一种机制。 常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
1.2 cookie是什么
其实本质他是浏览器也就是客户端程序上的一块内存。
-
Cookie机制 2.1 Cookie工作原理 cookie可以理解为客户端拥有的通行证(哈哈,很形象了),Cookie实际上是一小段的文本信息啦。当一个浏览器访问某web服务器时,web服务器会调用HttpServletResponse的addCookie()方法,在响应头中添加一个名叫Set-Cookie的响应字段用于将Cookie返回给浏览器,客户端浏览器会把返回的Cookie保存起来。当浏览器再次访问该web服务器时会自动的将该cookie回传给服务器,服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容,以此来实现用户状态跟踪。另外,Cookie功能需要浏览器的支持。
Cookie的安全属性 HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。如果不希望Cookie在HTTP等非安全协议中传输,可以设置Cookie的secure属性为true。
Cookie的不可跨域名性 很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?
答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。
Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。
2.Session
Session机制 除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,但是相应的也增加了服务器的存储压力。
Session的工作原理 Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。session有两种实现方式,其中一种是通过cookies实现。就是把session的id 放在cookie里面,当允许浏览器使用cookie的时候,session就会依赖于cookies。
Session的生命周期及有效期 Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。Session在用户第一次访问服务器的时候自动创建,Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
-
Session与cookie的区别 cookie数据存放在客户的浏览器上,session数据放在服务器上. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。 session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。
3.token
1、token的定义: Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token并返回给客户端,以后客户端向服务器发送请求时,带上Token即可,无需再次带上用户名和密码。 2、为什么要用token? 产生背景: 试想下如果有人知道了你的请求接口,如果他在不登录的情况下,恶意调用你的删除接口,随意删除你的数据,这样是不是会给你造成很大的麻烦,所以每次你调用接口时后台需要验证你是否登录,这就是token产生的背景。 Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。 3、如何使用 登录的时候传入用户名和密码给后台,后台会返回token,以后每次调用接口时带上这个token就可以了。
如何通过这三个东西来知道是否有http会话是否建立呢?
如果浏览器有服务器给的cookie,说明浏览器访问过服务器。而cookie是服务器给的,客户一旦退出浏览器,那么cookie就会消失,会话就会消失。
如果服务器有session,则说明会话是存在的,一般情况来说session是有时间规定的,session一段时间没有被进行匹配调用的话,那就会被删除。
token一般就是 服务器给的一串字符有用户的id和一些其他信息。
只要有token在请求里面都会去匹配底层的服务器的数据库的用户id,所以不会浪费空间就是查询数据库有点浪费时间。
token的应用有一般对接一些软件的北向的接口,也就是利用postman这样的工具
输入对应的北向对接获取到软件服务器的token,这样下次对接就直接去访问对应软件的底层的信息或者数据库了。