常用会话管理方式

会话管理方式

http是无状态的,这就意味着客户端即使第一次请求已经验证了身份,但是第二次请求的时候服务器仅通过http连接并不能知道是那个用户。但是我们是需要状态管理的,比如用户登录了才能做一些其它操作,这就需要我们进行会话管理。

这里主要讲两种管理方式

  • 基于session的管理方式
  • 基于ticket管理方式

1. 基于session的方法

  1. 客户端送第一次请求后,服务端在服务器创建session信息,并将sessionid传送给浏览器

第一次请求

第一请求并没有带cookie信息,服务器返回set-cookie字段,并带有sessionid(laralve_session)

  1. 客户端再次请求会通过cookie带着这个sessionid
    再次请求

因为上次的响应有set-cookie字段,将sessionid储存到cookie中,现在请求已经带着cookie字段,里面包含sessionid

3.这样我们就可以通过这个sessionid进行用户状态管理。

实际上上面的session并不具备会话管理功能,但是我们可以将我们的用户状态放到session对象里面,并存储在服务端。用户登录成功后,我们将登录凭证存储在session对象中,这样服务端在收到sessionid的时候就可以判断对应的session对象是否含有登录凭证,如果有则证明登录成功。

问题:

  1. session信息需要存储在服务端,信息过多会占用较多内存
  2. 服务器集群部署,多台服务器之间session信息不共享
  3. cookie要存储在域名下,如果同属于一级域名下比较好解决,但是如果不同域就有些麻烦,不能跨域,这就需要针对性解决

在实际部署中我们可能会使用redis存储,这样可以减轻服务器压力,也能解决服务器session共享问题

2. 基于ticket的方式

用户登录信息合法,服务端产生ticket信息,响应中将ticket信息传递给客户端,客户端并将ticket信息存储在客户端,以后每次请求的时候带着ticket信息,服务端收到每次请求后都验证ticket是否存在并且合法有效,来确认用户是否登录

  1. 用户使用用户名密码登录,服务端验证服务名密码是否正确,如果正确则创建登录凭证,这个登录凭证可能包含着用户id,过期时间等。
  2. 将登录凭证+签名+其它加密处理,然后将加密处理的字符串存储到客户端。
  3. 客户端发送请求后,服务端每次检测是否有此ticket信息,如果有则解密处理,查看签名是否正确,是否过期等等,如果都合法则说明用户登录有效。

问题:

  1. 储存的用户信息过多,导致ticket过大,如果使用cookie存储的话,cookie大小有限制,加密字符串过长的话会引发其他问题
  2. 每次请求都要带着ticket信息,ticket信息又比较大,降低访问性能
  3. 过期自动刷新问题

实际上在客户端ticket字符串不一定非要存储在cookie中,我们还可以存储在localstorage,sessionstroage等的地方。只要我们每次请求的时候取得这个ticket信息并且让服务端知道就可以表明身份。

关于这种方式,可以符合现成的标准JWT,这样就比较规范了,有兴趣的可以了解。

3. 总结

  1. 比较下上面两种方式,基于session的方式将用户凭证保存在服务端,基于ticket的方式保存在客户端。
  2. 只要不泄露以上的两种会话机制还是比较安全的,各有各的应用场景,根据自身情况来处理
  3. 以上都没有避免sessionid,ticket(加密字符串)的泄露问题,一旦泄露别人就可以冒充我们,做一些不可告人的事情。关于传输过程中的窃取可以使用https来避免,在客户端的凭证窃取需要我们自己注意了,比如laravel就使用csrf_token来避免CSRF攻击。

参考资料

http://www.cnblogs.com/lyzg/p/6067766.html

原文地址:https://www.cnblogs.com/redirect/p/8658613.html

时间: 2024-10-05 05:09:47

常用会话管理方式的相关文章

(转)web会话管理方式

阅读目录 1. 基于server端session的管理 2. cookie-based的管理方式 3. token-based的管理方式 4. 安全问题 5. 总结 http是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的,但是对于我们的应用来说,我们是靠用户来管理,而不是靠客户端.所以对我们的应用而言,它是需要有状态管理的,以便服务端能够准确的知道http请求是哪个用户发起的,从而判断他是否有权限继续这个请求.这

http 3种web会话管理方式

http是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的,但是对于我们的应用来说,我们是靠用户来管理,而不是靠客户端.所以对我们的应用而言,它是需要有状态管理的,以便服务端能够准确的知道http请求是哪个用户发起的,从而判断他是否有权限继续这个请求.这个过程就是常说的会话管理.它也可以简单理解为一个用户从登录到退出应用的一段期间.本文总结了3种常见的实现web应用会话管理的方式: 1)基于server端sessio

3种 web 会话管理的方式

转自:http://www.yidianzixun.com/n/0F1GYAsQ?s=8&appid=xiaomi&ver=3.7.8&utk=4lxc4q7c&from=timeline http是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的,但是对于我们的应用来说,我们是靠用户来管理,而不是靠客户端.所以对我们的应用而言,它是需要有状态管理的,以便服务端能够准确的知道http请求是哪个用

总结个人职场常用管理方式

瀑布式 瀑布式开发用行业术语来解释就是,在软件定项的时候个开发阶段的准备:需求分析,组件定义,概要设计,详细设计,编码规范,冒烟测试,PRE/PRD测试等. 也就是说在开发之前就把一系列的事情都定义好,按步骤完成对应任务缺一不可. 优点: 1.步骤清晰明确: 2.文档完整,开发过程中可以作为参考: 缺点: 1.瀑布开发是从工业发展过来的,不适合计算机软件的开发: 2.开发周期长,花大量时间去编写文档,耗费时间.人力: 3.客户只有在整个项目完成时才可以看到成果,会导致信任问题: 4.风险大,在开

session management会话管理的原理

web请求与响应基于http,而http是无状态协议.所以我们为了跨越多个请求保留用户的状态,需要利用某种工具帮助我们记录与识别每一次请求及请求的其他信息.举个栗子,我们在淘宝购物的时候,首先添加了一本<C++ primer>进入购物车,然后我们又继续去搜索<thinking in java>,继续添加购物车,这时购物车应该有两本书.但如果我们不采取session management会话管理的话,基于http无状态协议,我们在第二次向购物车发出添加请求时,他是无法知道我们第一次添

Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)

参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url-rewriting Java Web应用程序中的会话管理(Session Management)是一个非常有趣的话题.Java Servlet中的会话通过不同的方式进行管理,例如Cookie,HttpSession API,URL重写等. 这是Java Web应用程序系列教程中的第三篇文章,您可能

JavaWeb基础—会话管理之Cookie

一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去. 2.Session 基于服务端.session类似于客户端在服务器端的账户.使用Map存放.服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象. 三.Cookie的用途 Cookie的用途: 服务器用来跟踪客户端状态

Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息经过处理之后会保存在cookie.缓存.Session等地方,然后还有一个过期时间,避免每次都要去捞数据库.在node下基本上也是这个思路,这一节的内容会涉及到user模型的加密方式.如何生成一个Json Web Token(JWT).以及在客户端用Angular创建注册和登录页面,在请求需要认证的

会话管理

一.会话管理的基本原理 web应用程序的请求与响应是基于HTTP,为无状态的通信协议,服务器不会记得这次请求和下次请求的关系,如购物车,用户可能在多个购物网页之间采购商品,web应用程序必须有个方式来得知用户在这些网页中采购了哪些商品,这种记得此次请求与之后请求间关系的方式,就称为会话管理(Session Management). 1.使用隐藏域 隐藏域就是主动告知服务器多次请求间必要信息的方式之一.以问卷作答的为例,上一页的问卷答案,可以用隐藏域的方式放在下一页的窗体中,这样发送下一页窗体,就