2012-08-16 23 views
10

Sinatra không bền bỉ phiên của tôi bằng chuyển hướng trên Chrome. Nó đang tạo một phiên hoàn toàn mới và tôi đang mất tất cả dữ liệu phiên trước đó của mình.Phiên bản Sinatra không bền bỉ với chuyển hướng trên Chrome

Như một ví dụ (tương tự như the Sinatra docs), tôi đang làm một cái gì đó như thế này:

enable :sessions 

get '/foo' do 
    session[:user_id] = 123 
    session[:session_id] # "ABC", for example 

    redirect to('/bar') 
end 

get '/bar' do 
    # this is "DEF" when responding to Chrome (wrong), 
    # but "ABC" when responding to Firefox or Safari (right) 
    session[:session_id] 

    # this is nil when responding to Chrome (wrong), 
    # but 123 when responding to Firefox or Safari (right) 
    session[:user_id] 
end 

Tôi nghĩ điều này có cái gì để làm với cách thức trình duyệt khác nhau đáp ứng xử lý phiên sau khi chuyển hướng phản ứng. Có ai nhìn thấy một cái gì đó tương tự như thế này, hoặc có bất kỳ ý tưởng về cách giải quyết này trong khi vẫn đang sử dụng phiên?

Cảm ơn trước!

+2

Xử lý phiên mặc định trong sinatra được thực hiện bằng cookie, vì vậy tôi đoán điều này có liên quan đến cách xử lý chrome (hoặc từ chối xử lý) Yêu cầu đặt cookie trên chuyển hướng. Bạn không chắc chắn làm thế nào bạn có thể đối phó với điều đó, nhưng một cách đơn giản xung quanh toàn bộ vấn đề sẽ là sử dụng db dựa trên phiên, hoặc trong phiên làm việc với redis hoặc một cái gì đó tương tự. – Jonah

+0

Môi trường của bạn là gì? Tôi vừa giải quyết một vấn đề liên quan đến việc lưu trữ phiên biến mất có thể là sự quan tâm, nhưng điều đó phụ thuộc vào nơi/làm thế nào điều này đang xảy ra với bạn. –

+0

Tôi gặp vấn đề tương tự, sử dụng dàn dựng làm môi trường. –

Trả lời

0

Vui lòng cố gắng tắt tất cả tiện ích quản lý cookie tùy chỉnh là Chrome nếu có. Sau đó kiểm tra tiêu đề trong Công cụ dành cho nhà phát triểnMạng. Nên xem trường 'Cookie:'.

1

Thêm mã này vào tệp ứng dụng chính của bạn: sử dụng Rack :: Session :: Cookie,: key => 'rack.session', : path => '/', : secret => 'some-random -string '

Khi được thêm, bạn sẽ có thể chỉ định phiên [' bất cứ điều gì '] và làm cho phiên hoạt động như mong đợi.

+0

điều này làm việc cho tôi trên pcDuino 3b sinatra –

+0

Bất cứ ai có thể giải thích tại sao điều này nên khắc phục vấn đề? Đọc tài liệu Sinatra, nó nói rằng điều này có thể được sử dụng để thêm các tham số bổ sung cho các phiên, nhưng tôi không chắc nó làm gì cho phép: các phiên không? – Michael

0

Tôi nghĩ rằng chỉ vì bạn không thiết lập :session_secret, hãy tham khảo câu trả lời của tôi trên here

0

Bằng cách enable :sessions bạn chỉ nhận được quyền truy cập vào phiên mỗi yêu cầu. Sinatra không có cách nào để giữ tham chiếu đến cuộc gọi trước đó (chuyển hướng của bạn) vì nó được coi là một yêu cầu khác.

Như vậy, câu chuyện dài ngắn:

set :session_secret, "SecureRandom.new(10) generated thing" enable :sessions

luôn luôn sử dụng enable :sessions với một bí mật, nếu không phiên của bạn được tái tạo mỗi lần giá thấy một yêu cầu.

Các vấn đề liên quan