【问题标题】:how does server recognize client's session cookie without storing it on server服务器如何识别客户端的会话cookie而不将其存储在服务器上
【发布时间】:2016-10-17 08:53:03
【问题描述】:

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

这是来自游戏框架的文档:(link)

请务必了解,Session 和 Flash 数据不是由服务器存储,而是使用 cookie 机制添加到每个后续 HTTP 请求中

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

现在我的问题是,如果服务器没有保存任何关于会话 ID 的信息,它如何验证来自客户端的会话?!

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

【问题讨论】:

    标签: session playframework session-cookies playframework-2.3 session-state-server


    【解决方案1】:

    现在我的问题是,如果服务器没有保存任何关于 session id,它如何验证来自客户端的会话?

    play 的作用是通过一个密钥对您的会话数据进行签名,例如 KEY(它是您在 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 的数据部分并再次发送请求来确认这一点,会话将不存在。

    这是我观察到的

    【讨论】:

    • 确认 - 密钥确实由 application.secretapplication.conf 中定义。
    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多