2013-08-20 52 views
6

Tôi không thể tìm thấy bất kỳ ví dụ đơn giản nào khi sử dụng Rack::Session::Cookie và muốn lưu trữ thông tin trong cookie và truy cập thông tin đó vào các yêu cầu sau đó và yêu cầu hết hạn.Có bất kỳ ví dụ cơ bản về Rack :: Session :: Cookie sử dụng không?

Đây là những ví dụ duy nhất mà tôi đã có thể tìm thấy:

Đây là những gì tôi nhận được:

use Rack::Session::Cookie, :key => 'rack.session', 
           :domain => 'foo.com', 
           :path => '/', 
           :expire_after => 2592000, 
           :secret => 'change_me' 

Và sau đó thiết lập/truy xuất:

env['rack.session'][:msg]="Hello Rack" 

Tôi không thể tìm thấy bất kỳ hướng dẫn hoặc ví dụ nào khác cho việc thiết lập điều này. Ai đó có thể giúp đỡ?

Trả lời

2

Bạn đã thiết lập cookie trong câu hỏi của mình. Tôi không chắc chắn nếu bạn có nghĩa là một cái gì đó khác bằng cách "thiết lập".

Thay vì env['rack.session'] bạn có thể sử dụng session[KEY] để đơn giản hóa.

session[:key] = "vaue" # will set the value 
session[:key] # will return the value 

Simple Sinatra dụ

require 'sinatra' 
set :sessions, true 
get '/' do 
    session[:key_set] = "set" 
    "Hello" 
end 
get "/sess" do 
    session[:key_set] 
end 

Cập nhật

Tôi tin rằng nó không được làm việc cho bạn vì bạn đã thiết lập miền không hợp lệ. Vì vậy, tôi đã phải cắt nó ra :domain => 'foo.com',. BTW Sinatra kết thúc tốt đẹp Giá cookie và hiển thị session trợ giúp. Vì vậy, trên mã làm việc tốt cho tôi. Tôi tin rằng mã sau đây sẽ hoạt động như mong đợi.

require 'sinatra' 
use Rack::Session::Cookie, :key => 'rack.session', 
    :expire_after => 2592000, 
    :secret => 'change_me' 
get '/' do 
    msg = params["msg"] || "not set" 
    env["rack.session"][:msg] = msg 
    "Hello" 
end 
get "/sess" do 
    request.session["msg"] 
end 
  • bộ giá trị phiên msg gốc truy cập hoặc / mặc định là 'không được thiết lập' nếu bạn vượt qua ?msg=someSTring nó nên đặt msg với giá trị mới.
  • truy cập /sess để kiểm tra nội dung nào trong phiên.

Bạn có thể mất một tín hiệu từ How do I set/get session vars in a Rack app?

+0

Vấn đề tôi đã khám phá ra với điều này là nếu tôi khởi động lại dịch vụ Web, phiên đã chết, và phiên thiết lập sẽ không được lưu trong cookie. Vì vậy, nếu bạn nhấn '/', hãy khởi động lại sinatra, sau đó nhấn/sess, bạn sẽ không trả lại bất kỳ thông tin nào. – Dishcandanty

+1

Lưu ý rằng mã trên là dành cho ** Sinatra ** và nó hơi khác so với đoạn mã bạn đã đăng nhưng về cơ bản nó kết thúc tốt đẹp Rack Cookie nội bộ AFAIK. Tôi đã không làm việc trên Rack trực tiếp vì vậy tôi đã phải dành một chút thời gian để tìm ra điều này. Vui lòng tham khảo câu trả lời được cập nhật ở trên. – ch4nd4n

+0

Tôi nghĩ bạn nên làm rõ sự khác biệt giữa 'env [" rack.session "] [: msg]' và 'request.session [" msg "]'. –