几种保持登录状态的方式

几种保持登录状态的方式

三种保持会话的方式

(一)session机制保持会话

存在的问题

  • 高并发情况下,会占用服务器大量内存
  • 分布式(一个业务分成几个子业务,部署在多个服务器)或者集群(一个业务部署在多个服务器)的时候,session不能共享。

解决方案

  • 高并发的时候可以将session存储到redis,如果用户长时间没有访问,将session存储到redis,就减少了服务器的压力。
  • 分布式或者集群的时候,先通过redis来判断用户状态也可以实现session共享.

(二)cookie机制保持会话

使用的方法

  • 登录验证后,创建登录凭证(比如:用户id+登录时间+过期时间),将登录凭证进行加密(为了避免暴露信息),加密后写到浏览器的cookie,以后,每次请求都发送cookie,服务器根据对应的解密算法对其进行验证(或者将加密过的cookie内容存储到数据库,请求服务器的时候,服务器在数据库进行查找)。

存在的问题

  • 每次访问都提交cookie,增加请求量
  • 其他访问可能需要cookie(比如说购物车的信息存放在cookie),浏览器对每个域存储的cookie的大小有限制,那么需要控制加密后的凭证。

(三)token机制保持会话

使用方法

  • cookie 和session依赖于浏览器,如果客户端不是浏览器,那么需要手动添加token(和cookie类似,也是登录凭证),将token添加到http header或者做为参数添加到url。

存在的问题

  • 每次访问的时候手动添加token
  • 和cookie 的方式一样增加了请求量

总结

不同的方式适合不同的应用场景,视情况使用。

相同点

  • 所有的方式目的都是为了验证用户状态。
  • 都需要在客户端存储凭证。

不同点

  • 第一种是通过是通过空间换时间,消耗内存存储session对象,但是判断用户状态不用复杂的逻辑。第二种第三种用时间换空间,在服务器端逻辑处理进行判断用户状态。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112529.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jsonobject详解_object转json字符串

    jsonobject详解_object转json字符串JSON(JavaScriptObjectNotation的首字母缩写)是一种轻量级数据交换格式,最常用于客户端-服务器通信。它既易于读/写,又与语言无关。JSON值可以是另一个JSON对象,数组,数字,字符串,布尔值(true/false)或null。也是后端开发中经常要接触的一个一个类,将要数据封装成json然后传递给前端。只要我们导入如下maven依赖即可使用由阿里巴巴发布的…

    2022年9月22日
    4
  • iOS学习笔记——滚动视图(scrollView)

    滚动视图:在根视图中添加UIScrollViewDelegate协议,声明一些对象属性在程序中导入图片,在.m文件中的代码实现:推荐:http://www.cnblogs.com/roucheng

    2021年12月27日
    31
  • 中文词向量大全[通俗易懂]

    中文词向量大全[通俗易懂]#中文词向量大全https://github.com/Embedding/Chinese-Word-Vectors里面有词向量下载(很多的类型)#使用方法下载后加载方式:unicode字符哦!importgensimfromgensim.modelsimportKeyedVectorsmodel=KeyedVectors.load_word2vec_format…

    2022年5月3日
    74
  • win7下虚拟显示器完成记(virtual monitor)——VDI显卡透传场景「建议收藏」

    win7下虚拟显示器完成记(virtual monitor)——VDI显卡透传场景「建议收藏」背景本次使用wddm过滤驱动的应用场景是VDIGPU透传场景,我这边运用WDDM过滤驱动,也有人叫wddmhook,主要有如下功能:(1)给透传显卡虚拟出一个显示器,因为透传显卡都是插在服务器上,一台服务器需要插十几张显卡(消费级显卡),不可能给每个显卡插一个显示器,不插显示器又会存在分辨率无法设置,分辨率过低的问题,为此需要自己虚拟一个显示器“插”在透传显卡上。(2)我们VDI使…

    2022年8月21日
    11
  • 利用cmd命令进入mysql数据库

    利用cmd命令进入mysql数据库1.打开cmd。2.输入电脑上mysql安装的盘路径:之后回车3.输入完整的mysql.exe安装路径:cdD:\mysql\bin 之后回车4.输入mysal-hlocalhost-uroot(数据库名称)-p*****(数据库的密码)之后回车注:每个-前都有空格5.此时已进入mysql数据库,可以根据showdatabases;语句显示现有的数据库6.也可以对数据库进行操作,例如

    2022年5月31日
    36
  • Idea激活码最新教程2019.3.4版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2019.3.4版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2019 3 4 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2019 3 4 成功激活

    2025年5月23日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号