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的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用 DefaultHttpClient 登录网站并保留会话/cookie