服务器如何识别客户端的会话cookie而不将其存储在服务器上
how does server recognize client's session cookie without storing it on server
我想了解无状态 Web 应用程序中的会话管理机制究竟是如何工作的。目前我正在使用 Play Framework,但我认为所有无状态 Web 框架的机制应该相同
这是来自 play 框架的文档:(link)
It’s important to understand that Session and Flash data are not stored by the server but are added to each subsequent HTTP request, using the cookie mechanism
和
Of course, cookie values are signed with a secret key so the client can’t modify the cookie data (or it will be invalidated).
现在我的问题是,如果服务器不保存有关会话 ID 的任何信息,它如何验证来自客户端的会话?!
我做了很多搜索,但我找不到服务器端的会话管理是如何工作的。
Now my question is, if the server does not save anything about a
session id, how does it authenticate a session coming from a client?
play 的作用是通过密钥(即您在 application.conf 中设置的 application.secret)对您的会话数据进行签名并生成字母数字数据。然后它将数据和加密数据附加到 cookie 并将其发回
加密数据= 5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea
数据=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 中的数据部分并再次发送请求来确认这一点,会话将不存在。
这是我观察到的
我想了解无状态 Web 应用程序中的会话管理机制究竟是如何工作的。目前我正在使用 Play Framework,但我认为所有无状态 Web 框架的机制应该相同
这是来自 play 框架的文档:(link)
It’s important to understand that Session and Flash data are not stored by the server but are added to each subsequent HTTP request, using the cookie mechanism
和
Of course, cookie values are signed with a secret key so the client can’t modify the cookie data (or it will be invalidated).
现在我的问题是,如果服务器不保存有关会话 ID 的任何信息,它如何验证来自客户端的会话?!
我做了很多搜索,但我找不到服务器端的会话管理是如何工作的。
Now my question is, if the server does not save anything about a session id, how does it authenticate a session coming from a client?
play 的作用是通过密钥(即您在 application.conf 中设置的 application.secret)对您的会话数据进行签名并生成字母数字数据。然后它将数据和加密数据附加到 cookie 并将其发回
加密数据= 5d9857e8a41f94ecb2e4e957cd3ab4f263cfbdea
数据=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 中的数据部分并再次发送请求来确认这一点,会话将不存在。
这是我观察到的