Ktor 登录会话 cookie

Posted

技术标签:

【中文标题】Ktor 登录会话 cookie【英文标题】:Ktor Login Session cookie 【发布时间】:2021-07-06 14:57:58 【问题描述】:

我正在使用 ktor 进行登录项目。我目前正在使用旧方法与会话

    install(Sessions) 
    cookie<LoginSession>(
        "login_session",
        SessionStorageMemory()
    )
        cookie.path = "/"
        cookie.extensions["SameSite"] = "lax"
        val secretSignKey = hex("000102030405060708090a0b0c0d0e0f")
        transform(SessionTransportTransformerMessageAuthentication(secretSignKey))

    


此代码是最后一个,所以如果我删除 sessionmanager 和 secretsignkey,它将以纯文本形式显示它的值 剩下的很简单,我路由一个 get /login 来显示表单,一个 post /validate 来验证用户输入的数据,然后如果一切正常,我就设置会话。问题是我可以使用检查元素-> 应用程序-> cookie 查看会话值,并且我可以通过知道它的 ID(在会话中我存储用户 ID)来更改它的值,以便能够以任何用户身份登录。在过期列上它没有说会话。我究竟做错了什么? P.S:我已经阅读了有关身份验证功能的文档,但我想在会话中保留这个简单的想法。

【问题讨论】:

作为login_session cookie 的值,我看到类似c3b41b8ccba114c0d389a57144547735%2Ff78fe1f40922231a928660db9dd6b267bb6ae69bee6d8a8020c8d1c9d3f1d6c1 的内容。您能否更新您的问题以提供一个具体示例,说明用户如何更改 cookie 值并共享 LoginSession 类的定义? @AlekseiTirman 您会看到该字符串,因为您使用 SessionStorageMemory,如果您删除该行,您将看到纯文本 【参考方案1】:

使用 Ktor session transformer 转换(验证或加密)cookie 内容。

例子:

// REMEMBER! Change ALL the digits in those hex numbers and store them safely
val secretEncryptKey = hex("00112233445566778899aabbccddeeff")
val secretAuthKey = hex("02030405060708090a0b0c")
cookie<TestUserSession>(cookieName) 
    transform(SessionTransportTransformerEncrypt(secretEncryptKey, secretAuthKey))

【讨论】:

以上是关于Ktor 登录会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中使用会话和 cookie 创建安全登录

登录/会话 cookie、Ajax 和安全性

会话固定漏洞

Android:使用 DefaultHttpClient 登录网站并保留会话/cookie

android 用httpclient登录无法保持会话状态 最后两次请求的cookie都不一样!我明明设成一样了?

会话记住已登录功能