【问题标题】:Session Problem in SinatraSinatra 中的会话问题
【发布时间】: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

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

干杯,

乔纳斯

【问题讨论】:

标签: ruby session sinatra


【解决方案1】:

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

【讨论】:

  • 我试过这个,因为我在文本中输入了 expire_after 作为解决方法。
猜你喜欢
  • 2015-07-18
  • 2012-02-25
  • 2017-09-16
  • 2013-12-13
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
相关资源
最近更新 更多