【问题标题】:Why are new sessions created all the time?为什么总是创建新会话?
【发布时间】:2014-10-17 06:13:22
【问题描述】:

在 Rails 应用程序中,随着生产数据库的增长,会不时创建大量会话。作为一种解决方法,我不时删除会话。我想解决这个问题,但我不知道如何调试这样的情况。会话数据非常小,所以我可以切换到 cookie 存储,但这并不能解决问题。调试这种情况的最佳技术是什么?创建大量新会话的原因可能是什么?

我是该应用程序的唯一用户,它在本地虚拟盒子上运行,但其他人可以看到。我的上下文是:

  • Rails 4.0.0(最近没时间升级)
  • SQLite3
  • 红宝石 1.9.3p547

问完问题后,我开了个会(所以没有积极使用 Rails 应用程序),当我回来时,一个查询

sqlite> select created_at, updated_at from sessions where updated_at > "2014-10-17";

显示如下结果:

2014-10-17 07:49:56.202187|2014-10-17 07:49:56.202187
2014-10-17 07:50:26.039702|2014-10-17 07:50:26.039702
2014-10-17 07:50:56.043092|2014-10-17 07:50:56.043092
2014-10-17 07:51:26.057016|2014-10-17 07:51:26.057016
2014-10-17 07:51:56.163507|2014-10-17 07:51:56.163507
2014-10-17 07:52:26.071406|2014-10-17 07:52:26.071406
2014-10-17 07:52:56.191103|2014-10-17 07:52:56.191103
2014-10-17 07:53:26.070792|2014-10-17 07:53:26.070792

因此,当请求导致新会话时,似乎有一个固定的时间表。我怎样才能找到原因?


更新:我已经集成了logging from another answer,现在日志条目与会话条目匹配。下一步是找到真正的发件人。更复杂,因为我使用 vagrant 和端口转发,所以 Rails 应用程序内的所有请求都来自同一台机器(主机)。

【问题讨论】:

  • 你在使用devise gem吗?
  • 不,我不知道。该 Rails 应用程序中没有实现身份验证/授权。所以知道 URL 的每个人都可以使用该应用程序(但我没有看到这种情况发生的迹象)。
  • 我的第一个猜测是那些是机器人或一些轮询网站的脚本,特别是因为它们每 30 秒平均创建一次。尝试获取这些请求的 IP。

标签: ruby session ruby-on-rails-4 sqlite


【解决方案1】:

我找到了常规呼叫的发起者(偶然)。我注意到,当我的 Opera 浏览器关闭时,整个 30 秒内都没有额外的日志条目,其中包含一个新会话。

我更深入地挖掘并发现,Opera 的“起始页”包含对我的 Rails 应用程序的调用作为条目之一。从“起始页”中删除该条目后,不再创建任何会话。

所以,对我来说,解决方案是不要从起始页获得参考。我从没想过会是这样:-(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 2023-04-03
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多