Session 服务器如何识别客户端';s会话cookie,而不将其存储在服务器上

Session 服务器如何识别客户端';s会话cookie,而不将其存储在服务器上,session,playframework,session-cookies,playframework-2.3,session-state-server,Session,Playframework,Session Cookies,Playframework 2.3,Session State Server,我试图理解无状态web应用程序中的会话管理机制到底是如何工作的。目前我正在使用Play框架,但我认为所有无状态web框架的机制都应该是相同的 这来自play框架的文档:() 了解会话和闪存数据不是由服务器存储的,而是使用cookie机制添加到每个后续HTTP请求中的,这一点很重要 及 当然,cookie值是用密钥签名的,因此客户端无法修改cookie数据(否则将失效) 现在我的问题是,如果服务器没有保存关于会话id的任何信息,它如何对来自客户端的会话进行身份验证 我做了很多搜索,但是我没有找到服

我试图理解无状态web应用程序中的会话管理机制到底是如何工作的。目前我正在使用Play框架,但我认为所有无状态web框架的机制都应该是相同的

这来自play框架的文档:()

了解会话和闪存数据不是由服务器存储的,而是使用cookie机制添加到每个后续HTTP请求中的,这一点很重要

当然,cookie值是用密钥签名的,因此客户端无法修改cookie数据(否则将失效)

现在我的问题是,如果服务器没有保存关于会话id的任何信息,它如何对来自客户端的会话进行身份验证

我做了很多搜索,但是我没有找到服务器端的会话管理是如何工作的

现在我的问题是,如果服务器没有保存关于 会话id,它如何对来自客户端的会话进行身份验证

游戏的作用是通过一个键对会话数据进行签名,比如key(它是在application.conf中设置的application.secret),并生成一个字母数字数据。然后,它将数据和加密数据附加到cookie并将其发送回

加密数据=
5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea

数据=
用户电子邮件=sil@st.com&用户名=silentprogrammer

如果您在正在运行的应用程序的浏览器中检查cookie(右键单击浏览器->检查元素->应用程序->cookie->您的url),您可以看到如下内容

"5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea-userEmail=sil@st.com&userName=silentprogrammer"
对于每个请求,它都会获得数据部分(
userEmail)=sil@st.com&userName=silentprogrammer
)再次对密钥中的数据进行签名,并将其检查为来自请求的字母数字数据,即
5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea
如果两者相等(如果数据和加密密钥相同)会话已确认,否则会话将过期。您可以通过在浏览器中更改cookie中的数据部分并再次发送请求来确认这一点,因为会话将不存在

这就是我所观察到的

现在我的问题是,如果服务器没有保存关于 会话id,它如何对来自客户端的会话进行身份验证

游戏的作用是通过一个键对会话数据进行签名,比如key(它是在application.conf中设置的application.secret),并生成一个字母数字数据。然后,它将数据和加密数据附加到cookie并将其发送回

加密数据=
5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea

数据=
用户电子邮件=sil@st.com&用户名=silentprogrammer

如果您在正在运行的应用程序的浏览器中检查cookie(右键单击浏览器->检查元素->应用程序->cookie->您的url),您可以看到如下内容

"5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea-userEmail=sil@st.com&userName=silentprogrammer"
对于每个请求,它都会获得数据部分(
userEmail)=sil@st.com&userName=silentprogrammer
)再次对密钥中的数据进行签名,并将其检查为来自请求的字母数字数据,即
5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea
如果两者相等(如果数据和加密密钥相同)会话已确认,否则会话将过期。您可以通过在浏览器中更改cookie中的数据部分并再次发送请求来确认这一点,因为会话将不存在


这就是我观察到的

确认-密钥确实是由
application.conf
中的
application.secret
定义的。确认-密钥确实是由
application.conf
中的
application.secret
定义的。