我在删除由 Ktor 0.9.0 服务器端应用程序设置的 cookie 时遇到问题。可能我不知道怎么做才对,或者是Ktor框架有遗漏。
cookie 创建和删除本身不是问题,但为了删除 cookie,我必须使用与客户端浏览器上的 cookie 存储的相同路径。Ktor 让我通过 cookie 创建来控制路径。这是我的配置:
install(Sessions) {
cookie<MySession>(sessionMarker) {
cookie.duration = cookieDuration
cookie.path = "/myWebapp"
transform(SessionTransportTransformerMessageAuthentication(sessionKey))
}
}
在登录页面上/myWebapp/page/login
,我创建了 cookie,然后将其发送到客户端,并在发送到 Web 应用程序的其余请求中来回传输:
call.sessions.set(MySession([some data class arguments]))
/myWebapp
在客户端上检查时,cookie 会显示路径。默认是/myWebapp/page
因为那是登录页面的路径,但路径取自上面显示的 cookie 配置。到目前为止一切都很好。
最终,用户希望通过对登录页面的 POST 请求注销:
call.sessions.clear<MySession>()
这里的问题是我还没有找到控制 cookie 路径的方法。因为登录页面/myWebapp/page/login
正在将过期的 cookie 发送回客户端以获得另一条路径(它自己的/myWebapp/page
),所以原始 cookie 不会被删除(/myWebapp/page
!= /myWebapp
)。
尝试删除时如何控制 Ktor 0.9.0 中 cookie 的路径?
我知道如何解决它:通过创建具有相同路径的 cookie,我将从中删除它。但这不是我想要的(Web 应用程序中还有其他路径,比如/myWebapp/others
应该使用 cookie)。在创建过程中控制 cookie 路径的能力是没有意义的。