Tag: session

如何在浏览器关闭时清除设计会话?

我在我的ruby on rails app上使用’devise’进行密码validation。 一旦我成功登录并关闭浏览器并打开一个新的浏览器窗口,我仍然登录。假设我正在使用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’) }); }); 但这一切都行不通。

在ruby中创建登录会话时了解“current_user”概念

我正在阅读伟大的Michael Hartl教程, 在这里构建ruby应用程序。 我试图理解如何创建会话的概念,我仍然坚持理解这一行: self.current_user = user 在这个方法中: module SessionsHelper def sign_in(user) cookies.permanent[:remember_token] = user.remember_token self.current_user = user end end 我理解使用user_token创建cookie的整个概念。 但是我不明白 self.current_user = user 是 什么 意思,为什么甚至需要保留这行代码 – 我有令牌的cookie – 为什么我需要知道当前用户? 此外,这个“自我”存储在哪里 – 它不像我在其中一个视图中看到的flash[:success]参数。 所以我不明白它在哪里。 在同一模块中也有这两种方法: def current_user=(user) @current_user = user end def current_user @current_user ||= User.find_by_remember_token(cookies[:remember_token]) end 而且我仍在努力为这个神秘的current user连接目的点 – 它的目的是创建@current_user全局变量以在视图中使用吗? 如果是这样 – […]

Rails会话没有保存

我正在将Rails应用程序从Rails 2直接升级到Rails 4.我正在使用带有CookieStore的新/config/initializers/session_store.rb文件,但出于某种原因我的会话没有保存。 当尝试按照render :text => “#{request.session_options[:id]}”方式执行某些操作时render :text => “#{request.session_options[:id]}”每次刷新时都会获得一个新的会话ID。 我尝试过不同的浏览器,所有人都应该接受cookie。 我不知道是怎么回事。 为什么这些会议不会持续?! 编辑:谢谢大家的建议。 这里有一些信息,还有一些我注意到的事情: 首先,关于我的设置 – 我在Windows 7机器上的Ubuntu VM上使用Rails 4 / Ruby 2到RVM运行服务器。 虽然我正在从Rails 2升级,但这只适用于models / controllers / views / etc – 我为所有支持基础架构生成了一个新的Rails 4应用程序。 我在JUST设置会话然后显示的同一个VM上创建了另一个应用程序,并且工作正常。 会话存储的内容根据用户的行为略有不同,但通常只包含一个用户ID(只是一个整数),偶尔会多一点 – (我首先注意到这在尝试传递OAuth令牌时表现出来)来自OAuth的gem。) 我注意到如果VM的系统时钟落后于Windows 7主机时钟,则用户ID会话保持不变。 这会导致其他问题,尤其是OAuth,但似乎只是某个时间问题。 我尝试过从我的环境/ development.rb中删除时区,但这没有帮助。

如何通过它的会话ID找到设计用户?

给定session[“session_id”]是否可以找到该会话所属的登录User ?

Rails 4 session.id偶尔为零

我在Heroku上运行一个简单的网站,当我运行应用程序时,我注意到一些奇怪的事情。 当我的用户登录数据库时,大约有50-60%的用户报告了一个nil session_id。 我正在使用active_record_store作为我的会话处理程序,使用Postgres作为我的数据库服务器。 我使用cookie_store得到了类似的结果,所以我不确定我做错了什么。 我唯一的猜测是用户发出的第一个请求,可能还没有填充id。 会话表具有正确的条目数,但我的跟踪表没有。 示例代码 class CaptionController < ApplicationController def index @image = Image.order("RANDOM()").first Tracking.log(session.id, Tracking::VIEW_CAPTION_ON_IMAGE, @image.id) end 上面的代码占50%的时间,会话在其记录的表中为零。

关闭浏览器时会话未被破坏 – RailsTutorial.org

通过Michael Hartl的railstutorial.org,我在第8章(特别是8.2.3)。 当前的问题是实现一个会话以保持用户在多个视图中登录,但本节中实现的function应该是一个临时会话,当浏览器窗口关闭时该会话过期(将用户注销)。 以下是教科书中的陈述,表明: 如果您完全退出浏览器,您还应该能够validation应用程序是否忘记了您的登录状态,要求您再次登录以查看上述更改。 我已在Google Chrome和Firefox上测试了此function – 我成功登录,导航到多个页面(以确保我的会话持续超出log_in重定向)然后关闭浏览器 – 但是当我重新加载Web应用程序时,我仍然登录。我已经完全按照文本中的内容复制了所有代码,但无济于事。 作为参考,这是我的sessions_helper.rb文件: module SessionsHelper # Logs in the given user. def log_in(user) session[:user_id] = user.id end # Returns the current logged-in user (if any). def current_user @current_user ||= User.find_by(id: session[:user_id]) end # Returns true if the user is logged in, false otherwise. def logged_in? !current_user.nil? […]

Rails – 多个顶级域和单个会话/ cookie

我一直在努力解决这个问题已经有一段时间了,并且无法找到解决方案。 我需要用户能够通过一次登录查看多个顶级域名。 我的理解是,这需要在environment.rb设置并使用before_dispatch调用。 这就是我想出来的: require ‘activesupport’ require ‘dispatcher’ module ActionController class Dispatcher def set_session_domain ActionController::Base.session_options.update :session_domain => “#{@request.host}” end before_dispatch :set_session_domain end end 但是,当我尝试从session[:session_domain]提取值时,这似乎不起作用。 任何帮助是极大的赞赏。