为什么Ruby on Rails会在每次点击时创建新的Sessions(有时)?

jhu*_*ner 5 session ruby-on-rails dispatcher ruby-on-rails-3

出于某种原因,我的RoR应用程序中的会话处理程序似乎在许多用户的生产中表现得很奇怪.我正在使用默认的RoR ActiveRecord会话存储,在开发过程中一切正常.只要我保持浏览器打开,每次修改会话时都会更新一个现有数据行,就像您希望会话一样.当我去生产服务器时,我个人观察到相同的行为.但是,在查看数据库时,我会在此屏幕截图中看到很多行:

http://imageshack.us/f/191/screenshot20110527at832.png/(抱歉,我不能直接在这里包含图片,因为我是新用户)

该网站包含在另一个网站上的iframe中,并有一个调度程序,该调度程序将根据某些会话数据(即对所有用户,相同的URL)将用户发送(redirect_to)到同一控制器中的另一个操作(mydomain.com/dispatcher )将包含在iframe中.映射到此URL的操作将根据会话[:current_action]决定将用户重定向到哪里.

该网站几乎没有任何流量,所以实际上没有办法.10个不同的用户每秒向网站发出请求.事实上,我可以在production.log中看到,被重定向时,用户具有不同的session_id,例如,当访问调度程序时,用户可能具有特定的sessionid并且在请求实际的目标操作时(由于redirect_to in调度员),sessionid将更改为其他内容.此外,大多数(>超过16000个数据行的97.5%以上)会话数据行的"生命周期"为0秒(即created_at等于updated_at).

你知道什么可能导致这个问题吗?

redirect_to调用是否有可能搞乱RoR会话处理?

非常感谢您的想法!

tad*_*man 2

session_id由于某种配置错误或从数据库获取会话的问题,您的访问者可能会为每个请求发出新值。对于基于 cookie 的会话,常见问题是 cookie 被分配到错误的域,或者访问版本时www.example.com和主机名之间存在冲突。example.comwww

另一个问题可能是会话上的签名被拒绝并自动创建新会话。

您可能想要创建一个诊断页面,仅转储session.session_id特定用户的信息,然后重新加载该页面以确保获得一致的结果。

如果您使用 Firebug,请查看标头,看看是否也为每个请求重新分配了会话。