http无状态和解决认证的方法

http

http无状态,是指http协议对事务处理没有记忆功能。浏览器和服务器两次请求和响应,之没有任何关系。

好处:响应速度快。

坏处:由于每次请求没有关联,所以我们对一系列连续请求进行处理时就比较繁琐。

当然多次请求可以使用数据每次保存用户状态进行验证,但是每次都去访问数据库,对数据库造成压力。

 

浏览器会话

 所谓的会话过程就是指从打开浏览器到关闭浏览器的过程。

 

为了解决HTTP无状态的缺点,cookie应用而生,cookie中保存用户的少量信息,每次请求时去验证cookie中的用户信息即可。这样就解决了HTTP无状态的问题。
但是这样也会有一个问题,cookie大小是有限制的,且cookie是保存在浏览器的用户可以查看修改cookie中的用户信息,会造成一个数据不安全的问题。

 

为了解决cookie大小和不安全的问题,session应用而生,session一半存在服务器,一半存在cookie中,当每次请求验证用户信息的时候,就可以根据cookie中的sessionId到服务器进行获取验证用户信息。

这样就解决了HTTP协议的无状态和cookie的不安全问题。

 

浏览器关闭,会话失效是因为关闭浏览器的时候的时候存在浏览器进程中的cookie失效,导致sessionId丢失。
当我们再次打开浏览器的时候创建的是一个新的cookie会话,携带的是一个新的sessionId,开始的是一次新的浏览器服务器的一次会话。

会话虽然失效,但是服务器依然存放的前一次的session,我们一般不做处理等待他自动失效。

 

cookie有两种:1.存放在浏览器进程中。2存放在硬盘中。是可以选择被设置的。

单体服务解决服务器无状态和用户鉴权:

 

单体系统中不存在cookie跨域和session服务器共享问题。

使用浏览器会话cookie和session可以得到解决。

 

 

微服务解决服务器无状态和用户鉴权:

微服务要考虑cookie跨域和session服务器共享问题。

域名相同的情况下:

spring-session+redis:当用户登录的时候我们会存放session到服务端和浏览器单,同时session一部分信息也会被存放到redis,当我们拦截认证时就可以去redis取session进行验证判断。

redis+token:当用户登录成功时生成token,将sessionId或者用户信息做key,token做value存放到redis,每次请求时拦截验证。

      用户信息+token可以实现一个用户同时只能登录一次。

jwt生成token方式:当用户登录成功时生成token,token返回给用户,客户端每次请求时携带token,然后服务端验证token是否正确。  token必须要在每次请求时发送给服务器,它应该保存在请求头中,另外,服务器要支持CORS(跨来源资源共享)策略,一般我们在服务端这么做就可以了 Access-Control-Allow-Origin:*。

 

域名不相同的情况下:

redis+token:当用户登录成功时生成token,将sessionId或者用户信息做key,token做value存放到redis,每次请求时拦截验证。

      用户信息+token可以实现一个用户同时只能登录一次。

SSO单点登录:需要一个独立的注册中心,用户第一次登录被拦截到认证中心进行登录,认证中心给用户办法token,用户每次登录都携带token,每次请求验证token是否正确。

 

 

*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************

http无状态和解决认证的方法

上一篇:AJAX的学习


下一篇:.Net平台的GC垃圾回收