gpt4 book ai didi

session - 在 Rails 中,当浏览器关闭时如何销毁 session ?

转载 作者:行者123 更新时间:2023-12-02 20:31:28 25 4
gpt4 key购买 nike

我正在阅读 Michael Hartl 的 Railstutorial,但我陷入了练习 9.6.2。我在网上搜索并在我的 session 助手中使用了以下代码:

module SessionsHelper

def sign_in(user)

session[:user_id] = user.id
self.current_user = user
end

def current_user=(user)
@current_user = user
end

def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end

def signed_in?
!current_user.nil?
end

def sign_out
session[:user_id] = nil
self.current_user = nil
end
end

我在网上找到的:http://www.nimweb.it/web-development/ruby-on-rails-web-development/ruby-on-rails-tutorial-exercise-9-6-2-rails-session/

但是,当浏览器关闭时,用户不会注销。还有其他人有解决这个问题的方法吗?

最佳答案

编辑:查看您提供的链接,他们写道:

We can also start the server (with “$ rails s”) and verify the functioning of our brand new session without cookies (we should be logged out every time we close the browser).

(强调)

因此,他们的解决方案是简单地关闭 cookie,这会导致每次访问都会创建一个新 session 。他们并不是真正谈论删除服务器端的旧 session 。

为了历史值(value),我的原始答案留在下面:

<小时/>

(抱歉,如果这太笼统了,我假设您没有看到更大的图景)

从根本上来说,网络使用基于拉取的模型 - 客户端发出请求以在服务器上执行操作。

您不能“强制”客户端关闭 session ,因为关闭 session 是客户端必须向服务器请求的操作(例如:通过注销)。

因此, session 通常有一个定期检查的超时期限。每个 session 都有一个存储在数据库中的“开始时间”,太旧的 session 将被清除。

也就是说,JavaScript 中可能有某种方法可以检测浏览器关闭事件并尽最大努力尝试关闭 session 。但这并不能保证 - 用户总是可以强行终止浏览器进程,使服务器完全蒙在鼓里。

简而言之,您不能依赖客户端来关闭 session 。超时可能是您最好的选择。

关于session - 在 Rails 中,当浏览器关闭时如何销毁 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com