gpt4 book ai didi

Vapor 4 中的 session 到期

转载 作者:行者123 更新时间:2023-12-04 09:26:48 27 4
gpt4 key购买 nike

我正在使用 Vapor 4 开发一个 Web 应用程序。在请求之间一次将客户端制作的数据保存在服务器端几分钟会很有用。我想使用 session 来做到这一点。但是,我对如何在设定时间后自动销毁这些数据的最佳方法感到有些困惑。我应该找一份工作并定期检查吗?或者是否有一种简单的方法来设置 session 创建的到期时间?

最佳答案

我用过一点Middleware几个月来实现这一目标,这是非常可靠的。
它将现在的时间戳与前一个请求的值进行比较。如果差异大于允许的 session 超时,则会强制注销。
我不得不考虑初始化时间戳和 "BAD"确保 nil尝试初始化 Double 返回,然后获取当前时间戳以启动 session “计时器”。我认为这是安全的,因为用户在没有事先至少进行一次路由调用的情况下无法登录,而我还有其他 Middleware检查以确保用户已登录。试试这个:

struct SessionTimeoutMiddleware:Middleware
{
func respond(to request:Request, chainingTo next:Responder) -> EventLoopFuture<Response>
{
let lastRequestTimeStamp = Double(request.session.data["lastRequest"] ?? "BAD") ?? Date().timeIntervalSince1970
request.session.data["lastRequest"] = String(Date().timeIntervalSince1970)
if Date().timeIntervalSince1970 - lastRequestTimeStamp > 300.0 // seconds
{
request.auth.logout(User.self)
return request.eventLoop.makeSucceededFuture(request.redirect(to:"/somewhere/safe"))
}
return next.respond(to:request)
}
}
然后,在 configure.swift注册使用:
let userAuthSessionsMW = User.authenticator()
let sessionTimeoutMW = SessionTimeoutMiddleware()
let timed = app.grouped(C.URI.Users).grouped(userAuthSessionsMW, sessionTimeoutMW)
try SecureRoutes(timed)

关于Vapor 4 中的 session 到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62972610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com