我在我的ruby on rails app上使用'devise'进行密码验证。一旦我成功登录并关闭浏览器并打开一个新的浏览器窗口,我仍然登录。假设我使用Chrome,我关闭所有chrome实例,然后打开一个新的。我仍然登录。当我也在使用IE和Firefox时也是如此。
我会假设关闭窗口并打开一个新窗口应该在服务器和浏览器之间建立一个新的会话不是吗?如果不是我如何实现这一目标?
我曾尝试点击浏览器窗口的onbeforeunload
事件上的注销按钮,但它不能用于在任何表单提交或链接点击时注销应用程序。
window.onbeforeunload = function() {
$('#logout_cls').click();
};
并尝试向会话控制器发送AJAX
请求以清除会话中的操作。
jQuery(window).bind(
"close",
function(event) {
$.ajax({
type: 'DELETE',
dataType: 'json',
url: $('#logout_cls').attr('href')
});
});
但这一切都行不通。
答案 0 :(得分:6)
原来问题是我的session_store的配置方式。
MyApp::Application.config.session_store :active_record_store,
{:key => '_my_app_session', :secret => '5xb5x1g92e965b95b16e49x79gxx9999', :expire_after => 2.hours}
我删除了选项,问题就解决了。
我还有另一个问题,那就是删除选项是否存在任何潜在风险?我没有明确地在会话中存储任何重要数据,但是输入我不希望暴露的数据。
我的应用程序将在几天内上线,为此获得答案将非常有帮助。我用谷歌搜索了一个小时左右但没有太多运气。
谢谢
答案 1 :(得分:2)
这实际上是一个功能。 Facebook和几乎所有具有身份验证的网站都是通过使用Cookie来实现的。
Devise的选项Rememberable“管理生成和清除令牌,以便从保存的cookie中记住用户”。如果您不想这样,请从用户模型中删除remember_token
字符串和remember_created_at
日期时间,然后从登录页面中删除Remember Me
按钮。