【发布时间】:2011-06-01 17:09:42
【问题描述】:
我的 sinatra 应用程序使用 Rack::Session::Pool 并且运行良好。
我使用session.clear 创建了一个注销路由,它也可以正常工作。
但是(总是有一个)如果用户关闭浏览器而不单击注销按钮,则用户在重新打开浏览器时会保持登录状态。
我检查了 Firefox 中的 cookie,会话 cookie (rack.session) 仍然存在!我去了我的站点,去了另一个站点,验证了 cookie 并且它在那里,关闭浏览器并再次打开它, rack.session 仍然存在 :( 我的客户甚至重新启动了他的机器,他仍然登录了该站点。
如果我在 Rack::Session::Pool 中设置 expire_date 它可以工作,但是 cookie 变得持久。我希望用户的会话在他关闭浏览器时过期而不管过期日期(最坏的情况是用户在公共计算机或局域网中)。
我已经为此工作了 2 天,我查看了机架源代码,并尝试在 Rack::Session::Abstract 中设置其他变量,但直到现在都没有成功。
现在我将会话设置为在 5 分钟后到期以尽量减少问题,但这不是一个好的解决方案,因为自上次请求以来用户仍然暴露了 5 分钟(如果用户没有点击注销按钮)。
这是我的 cookie 配置:
app = MyApp.new
sessioned = Rack::Session::Pool.new(app,
:domain => DOMAIN,
:expire_after => 5 * 60)
run sessioned
也许我在这里遗漏了一些东西。有谁知道可能是什么问题?还是有同样的问题?或者有什么链接?
干杯,
乔纳斯
【问题讨论】:
-
您确定用户仍处于登录状态吗?还是浏览器只是重新显示上次打开的页面(如果您刷新,您会被重定向到登录页面吗?)