三种保持会话的方式

(一)session机制保持会话

使用方法可以看 白话讲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对象,但是判断用户状态不用复杂的逻辑。第二种第三种用时间换空间,在服务器端逻辑处理进行判断用户状态。
时间: 2024-10-03 23:00:30

三种保持会话的方式的相关文章

Request三种获取数据的方式

今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Request.QueryString: 该方法主要是获取页面路径URL的参数: 2. Request.Form:该方法主要是以post请求方式获取报文体的参数: 3. Request.param:包含上面两种方式,它会在QueryString,Form,ServerVariable中都搜索一遍: 而我今

Objective-C:三种文件导入的方式以及atomic和nonatomic的区别

一.三种文件导入的方式比较: 类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义的,后面会告你,现在你就可以直接使用它,节约程序编译时间: 2.采用import方式,能避免重复导入同一类,它导入的不但这个类的所有的内容,而且使用它之前,编译器必须先对类的所有内容走一遍,就是先做预编译处理,这样比较耗费程序编译的时间. 3.采用include方式,不能避免重复导入的问题,但是它用在C

Objective-C:三种文件导入的方式比较

三种文件导入的方式比较: 类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义的,后面会告诉你,现在你就可以直接使用它,节约程序编译时间: 2.采用import方式,能避免重复导入同一类,它导入的不但这个类的所有的内容,而且使用它之前,编译器必须先对类的所有内容走一遍,就是先做预编译处理,这样比较耗费程序编译的时间. 3.采用include方式,不能避免重复导入的问题,但是它用在C/

三种实现Ajax的方式

本文主要是比较三种实现Ajax的方式 1. prototype.js 2. jquery1.3.2.min.js 3. json2.js Java代码 收藏代码 后台处理程序(Servlet),访问路径servlet/testAjax: package ajax.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.s

三种Tomcat集群方式的优缺点分析

三种Tomcat集群方式的优缺点分析 2009-09-01 10:00 kit_lo kit_lo的博客 字号:T | T 本文对三种Tomcat集群方式的优缺点进行了分析.三种集群方式分别是:使用DNS轮询,使用Apache R-proxy方式,以及使用Apache mod_jk方式. AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 Tomcat集群方式有三种,分别是: 1.使用DNS轮询. 2.使用Apache R-proxy方式. 3.使用Apache mod_jk方式

7.31(三种格式化输出的方式,基本运算类型,if循环)

复习 数据类型基础 变量是用来描述世间万物变化状态的,但是万物的状态是有多种的,要用不同的数据类型来表示 五大数据类型(数字类型,字符串,列表,字典,布尔类型) 数字类型又包括整型和浮点型 定义方式:age = 18:age = int(18):int('18') age = 18,age1 = 19 print(age,age1) age,age1 = 18.19 作用:描述年龄/id号等 使用方法:+-*/%//** 如果使用log方法,导入import cmath库 浮点型 定义方式:sa

Android开发——三种活动跳转方式

Android开发——三种活动跳转方式 1. 点击控件跳转 这里用 Button 举例,在布局文件中创建 Button 按钮,在再源码文件中写入活动跳转代码: Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainAc

http 3种web会话管理方式

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

三种标准库链接方式

Linux 应用程序因为 Linux 版本的众多与各自独立性,在工程制作与使用中必须熟练掌握如下两点才能有效地工作和理想地运行.1.Linux 下标准库链接的三种方式(全静态 , 半静态 (libgcc,libstdc++), 全动态)及其各自利弊.2.Linux 下如何巧妙构建 achrive(*.a),并且如何设置链接选项来解决 gcc 比较特别的链接库的顺序问题.全静态:1.-static -pthread -lrt -ldl2.不会发生应用程序在 不同 Linux 版本下的标准库不兼容问