2014-05-13 4 views
7

Czy ktoś może mi powiedzieć, w jaki sposób ustawić/używać zmiennych sesji w aplikacji Ruby on Rails od zera. Nie jestem w stanie ustawić/używać zmiennej sesji w moim kontrolerze między dwiema stronami. Używam typu sesji CookieStore. Jest to składnia używana do ustawiania i pobierania zmiennych sesji:Nie można ustawić/używać zmiennych sesji w kontrolerze ruby ​​na szynie

session[:test] = "testing" 

@test_str = session[:test] 

Daj mi znać w przypadku, gdy czegoś mi brakuje.

To jest jak mój kontroler wygląda następująco:

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 
+4

wygląda dobrze do mnie, co się dzieje, kiedy to zrobić. Jaki jest otaczający kod. Daj nam pełny przykład, który nie działa. Czy sprawdziłeś [dokumentację sesji] (http://guides.rubyonrails.org/action_controller_overview.html#session)? – Matt

+0

Cześć Matt, otrzymuję zerową wartość, gdy próbuję odzyskać wartość z sesji. – Anoop

+0

Dodano również kontroler. – Anoop

Odpowiedz

0

Jako zasada, w szynach tworzymy metodę w ApplicationController, zwany current_user W this wolnego RailsCast, widać dokładnie to, czego potrzebujesz:

+0

Nie używam active_record_store. Używam zarządzania sesją cookie_store. O ile rozumiem, nie ma potrzeby tworzenia żadnej metody. Powinniśmy być w stanie bezpośrednio dodać parametr do arrary sesji i znowu powinniśmy móc pobrać z niego to samo. Ale nie dzieje się to w mojej aplikacji. – Anoop

1

Ustawienia plików cookie sesji mogą być nieprawidłowe. Powinieneś sprawdzić nagłówki odpowiedzi i zobaczyć, jak wygląda nagłówek Set-Cookie.

Może to być niewłaściwa domena lub Twój plik cookie jest tylko w trybie https i jesteś na http.

Konfiguracja zwykle odbywa się w jakimś miejscu jak config/inicjalizatorów/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 
} 
+0

Cześć kimmmo, dziękuję za odpowiedź. Próbowałem implementować to, co próbowaliście, ale to też nie działa. Nadal nie można uzyskać parametru sesji przechowywanego w funkcji jednego kontrolera w innej funkcji tego samego kontrolera. – Anoop

1

spróbować tego w config/initializers/session_store.rb

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

To jest to, co mam w pliku session_store.rb MobikwikDemo :: Application.config.session_store: cookie_store, key: '_mobikwik-demo_session' – Anoop

+0

Twoja aplikacja to 'mobikwik-demo' lub' mobikwik_demo'? – user2503775

+0

mobikwik-demo to moja aplikacja. Chociaż nazwa mojej aplikacji to MobikwikDemo. Czy to spowoduje zmianę? – Anoop