我试图理解,无状态Web应用程序中的会话管理机制究竟是如何工作的。目前我正在使用Play Framework,但我认为所有无状态Web框架的机制应该是相同的
这来自play框架的文档:(link)
了解Session和Flash数据不是由服务器存储,而是使用cookie机制添加到每个后续HTTP请求中,这一点很重要
和
当然,cookie值是使用密钥签名的,因此客户端无法修改cookie数据(或者它将被无效)。
现在我的问题是,如果服务器没有保存会话ID的任何内容,它如何验证来自客户端的会话?!
我做了很多搜索,但我无法找到,服务器端的会话管理是如何工作的。
答案 0 :(得分:2)
现在我的问题是,如果服务器没有保存关于a的任何内容 会话ID,它如何验证来自客户端的会话?
它的作用是通过一个键(它是您在application.conf中设置的application.secret)来标记您的会话数据并生成一个字母数字数据。然后它将数据和加密数据附加到cookie并将其发回
加密数据= 5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea
DATA = userEmail=sil@st.com&userName=silentprogrammer
如果您在正在运行的应用程序的浏览器中检查cookie(右键单击浏览器 - >检查元素 - >应用程序 - > Cookie->您的URL),您可以看到类似
的内容"5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea-userEmail=sil@st.com&userName=silentprogrammer"
对于每个请求,它获取数据部分(userEmail=sil@st.com&userName=silentprogrammer
)再次从KEY签署数据,并检查来自请求的字母数字数据,即5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea
,如果两者相等(如果数据和加密密钥相同)会话被确认,否则会话到期。您可以通过在浏览器中更改cookie的数据部分并再次发送请求来确认这一点。
这就是我所观察到的