Sinatra的会话问题

时间:2010-12-30 19:08:08

标签: ruby session sinatra

我的sinatra应用程序使用Rack :: Session :: Pool,它工作正常。

我使用session.clear创建了一个退出路线,它也可以正常工作。

但是(总有一个)如果用户在没有点击退出按钮的情况下关闭浏览器,则用户在重新打开浏览器时会保持记录。

我检查了firefox中的cookie,还有会话cookie(rack.session)!我去了我的网站,去了另一个网站,验证了饼干,它就在那里,关闭浏览器并再次打开它和rack.session仍在那里:(我的客户甚至重新启动了他的机器,他仍然登录了网站。< / p>

如果我在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

也许我在这里遗漏了一些东西。有谁知道可能是什么问题?还是有同样的问题?或者任何链接?

干杯,

纳斯

1 个答案:

答案 0 :(得分:2)

删除:expire_after,它会在浏览器关闭时停止会话持续存在。