2012-08-16 57 views
10

Sinatra不會在Chrome上通過重定向保留我的會話。這是創造一個全新的會議,我失去了我以前的會議數據。Sinatra不會在Chrome上持久保留重定向會話

爲例(類似於the Sinatra docs),我做這樣的事情:

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 

我想這事做與不同的瀏覽器重定向後處理會話如何應對響應。有沒有人看到過類似的東西,或者有什麼想法如何解決這個問題,同時仍然使用會話?

在此先感謝!

+2

Sinatra中的默認會話處理是通過cookie完成的,所以我猜想這與Chrome處理(或拒絕處理)重定向的Set-Cookie請求有關。不知道如何處理這個問題,但圍繞整個問題的一個簡單方法是使用基於數據庫的會話,或使用redis或類似的內存會話。 – Jonah 2012-08-17 03:55:15

+0

你的環境是什麼?我剛剛解決了一個涉及會話存儲器消失的問題,可能會引起人們的興趣,但這取決於發生在哪裏/如何發生在您身上。 – 2012-08-19 22:25:24

+0

我遇到了同樣的問題,使用分段作爲環境。 – 2012-08-21 23:22:11

回答

0

請嘗試至禁用所有自定義Cookie管理擴展功能都是Chrome(如果有)。 之後在檢查標題開發人員工具網絡。應該看到「Cookie:」字段。

1

添加到您的主應用程序文件: 使用機架::會議::餅乾,:鍵=> 'rack.session', :PATH => '/', :祕密=>「一些隨機-string'

隨着增加,你應該能夠分配會議['不管'],並按預期工作。

+0

這適用於pcDuino 3b sinatra – 2016-01-10 16:13:46

+0

任何人都可以解釋爲什麼這應該解決這個問題?閱讀Sinatra文檔說它可以用來爲會話添加額外的參數,但我不確定它能做什麼:會話不會? – Michael 2016-02-01 19:08:11

0

我認爲這只是因爲你沒有設置:session_secret,請參閱我的回答對here

0

這樣做enable :sessions你只得到每個請求訪問會話。 Sinatra無法保留對之前呼叫的引用(您的重定向),因爲它被視爲另一個請求。

因此,長話短說:

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

始終使用enable :sessions有一個祕密,否則你的會話重建每次看到機架的請求。