Ruby on rails 无法在ruby on rails控制器中设置/使用会话变量

Ruby on rails 无法在ruby on rails控制器中设置/使用会话变量,ruby-on-rails,ruby,session,Ruby On Rails,Ruby,Session,有人能告诉我在RubyonRails应用程序中从头开始设置/使用会话变量的正确方法吗。我无法在控制器的两页之间设置/使用会话变量。我正在使用CookieStore会话类型。这是用于设置和获取会话变量的语法: session[:test] = "testing" @test_str = session[:test] 如果我遗漏了什么,请告诉我 这就是我的控制器的外观: class PaymentsController < ApplicationController # GET /m

有人能告诉我在RubyonRails应用程序中从头开始设置/使用会话变量的正确方法吗。我无法在控制器的两页之间设置/使用会话变量。我正在使用CookieStore会话类型。这是用于设置和获取会话变量的语法:

session[:test] = "testing"

@test_str = session[:test]
如果我遗漏了什么,请告诉我

这就是我的控制器的外观:

class PaymentsController < ApplicationController

  # GET /merchant_test  
  def merchant_test
    session[:test] = "testing"
    render :layout => false 
  end

  # POST /post_to_mobikwik
  def post_to_mobikwik
    zr = Mobikwik::Request.new(params) 
    @mobikwik_data = zr.all_params
    @test_str = session[:test]
    render :layout => false    
  end

  # POST /z_response
  def z_response
    zr = Mobikwik::Response.new(request.raw_post)  
    @checksum_check = zr.valid?
    @mobikwik_post = zr.all_params
    @statuscode = @mobikwik_post['statuscode']
    @statusmessage = @mobikwik_post['statusmessage']
    if @statuscode == "0"
       @verified = zr.verified?
    else
       @verified = false
    end
    render :layout => false
  end
class PaymentsControllerfalse
结束
#邮寄/邮寄至mobikwik
def post_to_mobikwik
zr=Mobikwik::Request.new(参数)
@mobikwik_data=zr.all_参数
@test\u str=会话[:test]
render:layout=>false
结束
#POST/z_响应
def z_响应
zr=Mobikwik::Response.new(request.raw\u post)
@校验和检查=zr有效吗?
@mobikwik_post=zr.all_参数
@statuscode=@mobikwik_post['statuscode']
@statusmessage=@mobikwik_post['statusmessage']
如果@statuscode==“0”
@已验证=已验证?
其他的
@已验证=错误
结束
render:layout=>false
结束

根据经验,在rails中我们创建了一个方法 在ApplicationController中,称为
current\u user

在免费RailsCast中,您可以准确地看到您需要什么:

您的会话cookie设置可能错误。您应该检查响应的标头,并查看Set Cookie标头的外观

它可能有一个错误的域,或者您的cookie仅为https,而您使用的是http

配置通常在config/initializers/session_store.rb等位置完成

Myapp::Application.config.session_store :cookie_store, {
  :key =>           '_appname_session_id',
  :path =>          '/',
  :domain =>        nil,   # accepted domain, for example '.example.com'  
  :expire_after =>  nil,   # the session will be expired in X seconds unless active
  :secure =>        false, # if true, cookie is valid only on https
  :httponly =>      true   # if true, javascript can't access the cookie
}

config/initializers/session\u store.rb

AppName::Application.config.session_store :cookie_store, key: '_app-name_session'

我觉得很好,你那样做会怎么样。周围的代码是什么。给我们一个不起作用的完整例子。你检查了吗?嗨,Matt,当我试图从会话中获取值时,我得到了一个零值。还添加了控制器。你可以使用浏览器检查cookie,它应该包含你的
测试
条目。否则,cookie可能包含太多信息(限制为4K)。它可能失败的另一个原因是您的会话以某种方式被重置。信息将在cookie中,但不在会话中(因为它已被清除)。在操作/筛选之前的
中的某个位置查找
reset\u session
命令(例如,通常在登录后执行此操作以禁用会话固定)。错误不在此处发布的代码中。它最有可能出现在某个地方的配置或其他非局部效果中@nathanvda的建议是最好的:首先检查浏览器中的cookie,它将被加密,但您至少可以看到它是否被设置。这是将问题一分为二的第一步确定问题出在设置还是获取上。。。另一个随机想法是:如果为cookie设置了安全标志,并且您正在混合http/https请求,那么我没有使用活动记录存储。我正在使用cookie_存储会话管理。据我所知,没有必要创建任何方法。我们应该能够直接将参数添加到会话数组中,并且再次能够从中获取相同的参数。但我的应用程序中没有出现这种情况。嗨,Kimmo,谢谢你的回复。我试着实现你的建议,但似乎对我也不起作用。仍然无法获取存储在同一控制器的另一个函数中的一个控制器函数中的会话参数。这是我在session_store.rb文件MobikwikDemo::Application.config.session_store:cookie_store中的会话参数,键:“'u mobikwik-demo_session'您的应用程序是
mobikwik-demo
mobikwik_-demo
?mobikwik-demo是我的应用程序。虽然我的应用程序名为MobikwikDemo。这会有所改变吗?我有像你一样的代码,但应用程序名像-app_name加下划线,而不是破折号。我认为这是唯一的改变…好的。谢谢你的建议。我试试这个。