加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何强制加载会话?

发布时间:2020-12-16 22:44:22 所属栏目:百科 来源:网络整理
导读:我正在处理需要使用会话ID信息的应用程序.我的会话存储在Cookie中.我遇到的问题是,当用户第一次来到该站点时,我的会话不能立即被控制器使用.我想我可能会缺少关于如何在Rails中初始化会话的内容.但是我对这个事实没有加载,因为这是session.inspect的输出: #
我正在处理需要使用会话ID信息的应用程序.我的会话存储在Cookie中.我遇到的问题是,当用户第一次来到该站点时,我的会话不能立即被控制器使用.我想我可能会缺少关于如何在Rails中初始化会话的内容.但是我对这个事实没有加载,因为这是session.inspect的输出:
#<Rack::Session::Abstract::SessionHash:0x15cb970 not yet loaded>

这里是如何重现Rails 3.2.11和ruby 1.9.3的问题:

使用测试控制器创建一个新的应用程序:

rails new my_app
cd my_app/
rails g controller test
rm app/assets/javascripts/test.js.coffee
touch app/views/test/index.html.erb

尝试获取该控制器中的会话ID:

class TestController < ApplicationController
  def index
    puts session[:session_id]
    puts session.inspect
  end
end

添加所需的路线:

MyApp::Application.routes.draw do
  resources :test
end

然后访问应用程序并查看它的作用:

rails server

得到:http:// localhost:3000 / test

那就是控制台的输出:

#<Rack::Session::Abstract::SessionHash:0x3fd10f50eea0 not yet loaded>

然后再次http:// localhost:3000 / test,这次我们有一个会话:

400706c0b3d95a5a1e56521e455075ac
{"session_id"=>"400706c0b3d95a5a1e56521e455075ac","_csrf_token"=>"Euaign8Ptpj/o/8/ucBFMgxGtiH7goKxkxeGctumyGQ="}

解决方法

我找到了一种强制会话初始化的方法.访问会话显然不强制初始化,而是写入会话.我现在在控制器里做的是:
class MyController < ApplicationController
  protect_from_forgery
  def index
    session["init"] = true
    do_stuff
  end
end

仍然我不知道这是否应该被认为是Rails的正常行为.我不必写入会话强制初始化看起来不正确.阅读就够了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读