【发布时间】:2014-07-01 03:33:59
【问题描述】:
谁能告诉我在 ruby on rails 应用程序中从头开始设置/使用会话变量的正确方法。我无法在两个页面之间的控制器中设置/使用会话变量。我正在使用 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
【问题讨论】:
-
对我来说看起来很好,当你这样做时会发生什么。周围的代码是什么。给我们一个不起作用的完整示例。你检查过documentation for session吗?
-
嗨,马特,当我尝试从会话中取回值时,我得到一个 nil 值。
-
也添加了控制器。
-
您可以使用浏览器检查 cookie,它应该包含您的
test条目。如果没有,您的 cookie 可能包含太多信息(限于 4K)。它可能失败的另一个原因是您的会话以某种方式被重置。该信息将在 cookie 中,但不在会话中(因为它已被清除)。在before_action/filter的某处查找reset_session命令(例如,它通常在登录后完成以禁用会话固定)。 -
错误不在您在此处发布的代码中。它很可能在某处的配置或其他非本地影响中。 @nathanvda 的建议是最好的:首先检查浏览器中的 cookie,它将被加密,但您至少可以查看它是否被设置。这是将问题一分为二的第一步——确定问题出在设置还是得到。 ...另一个随机想法:如果为 cookie 设置了 Secure 标志并且您正在混合 http/https 请求。
标签: ruby-on-rails ruby session