服务器实现会话状态两种方式

服务器实现会话状态两种方式,第1张

你问的是服务器实现会话状态两种方式有什么吧,服务器实现会话状态的两种主要方式如下:
1、Cookie:Cookie是一种在客户端存储数据的技术,服务器端可以通过设置Cookie来实现会话跟踪和状态管理。当客户端向服务器发送请求时,服务器可以在响应头中设置Cookie,并将需要保存的会话状态信息写入到Cookie中。客户端在接收到响应后,会将Cookie存储在本地,下一次请求时会将Cookie发送给服务器,服务器可以根据Cookie中的信息来判断用户的身份和状态。
2、Session:Session是一种在服务器端存储数据的技术,服务器可以将会话状态信息存储在Session中,通过SessionID来实现会话跟踪和状态管理。当客户端向服务器发送请求时,服务器会为该客户端生成一个唯一的SessionID,并将SessionID返回给客户端。客户端在接收到响应后,每次请求都会携带该SessionID,服务器可以根据SessionID来获取该客户端对应的Session对象,从而获取和修改会话状态信息。

Spring Security可以与Spring Session库配合使用,只需要做一些简单的配置就可以实现一些功能,如(会话过期、一个账号只能同时在线一个、集群session等)。

1)配置session会话超时时间,默认为30分钟,但是Spring Boot中的会话超时时间至少为60秒。

当session超时后, 默认跳转到登录页面。
2)自定义设置session超时后地址
设置session管理和失效后跳转地址

并发控制即同一个账号同时在线个数,同一个账号同时在线个数如果设置为1表示,该账号在同一时间内只能有一个有效的登录,如果同一个账号又在其它地方登录,那么就将上次登录的会话过期,即后面的登录会踢掉前面的登录。
1)修改超时时间

2)设置最大会话数量

3)阻止用户第二次登录
sessionManagement也可以配置 maxSessionsPreventsLogin:boolean值,当达到
maximumSessions设置的最大会话个数时阻止登录。

实际场景中一个服务会至少有两台服务器在提供服务,在服务器前面会有一个nginx做负载均衡,用户访问nginx,nginx再决定去访问哪一台服务器。当一台服务宕机了之后,另一台服务器也可以继续提供服务,保证服务不中断。如果我们将session保存在Web容器(比如tomcat)中,如果一个用户第一次访问被分配到服务器1上面需要登录,当某些访问突然被分配到服务器二上,因为服务器二上没有用户在服务器一上登录的会话session信息,服务器二还会再次让用户登录,用户已经登录了还让登录就感觉不正常了。

解决这个问题的思路是用户登录的会话信息不能再保存到Web服务器中,而是保存到一个单独的库(redis、mongodb、jdbc等)中,所有服务器都访问同一个库,都从同一个库来获取用户的session信息,如用户在服务器一上登录,将会话信息保存到库中,用户的下次请求被分配到服务器二,服务器二从库中检查session是否已经存在,如果存在就不用再登录了,可以直接访问服务了。

2)设置session存储类型

3)测试
使用其中一个服务去登录 >session是会话期存在的,意思就是:你打开你的电脑,登陆了后台,session(你自己电脑的浏览器中的session)把你的个人信息保存上了,然后你就可以访问网站后台了。当你把浏览器关闭后,这个会话期也就结束了,也就是说,session中的值就没了,login
=
rigth
也不存在了,而为login
=
null了。
其它人登陆,是在他的电脑上登陆的,这时的session是他电脑上浏览器的,跟你电脑没关系,他电脑的session是为login
=
null的。
一句话:一个电脑(浏览器)一个session。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13380411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存