2012-01-21 16 views
3

私は理由は分かりませんが、セッションはすべてのリクエストを一掃します。Sinatraセッションが自動的に破棄されます

これは、例えば、あなたがセッションの秘密を設定する必要が一貫したセッションを維持するために私のコード

require 'rubygems' 
require 'sinatra' 
require 'sinatra/base' 
require 'haml' 
require 'facebook_oauth' 
class MyClass < Sinatra::Base 
    set :logging, true 
    set :sessions, true 
    get "/auth/facebook_callback" do 

    // Do some facebook login which is fine  

    access_token = facebookClient.authorize(:code => params[:code]) 
    session[:access_token] = access_token.token 
    session[:user] = facebookClient.me.info['name'] 
    session[:id] = facebookClient.me.info["id"] 
    #print session by "pp session" I can still see all the sessions 
    redirect '/' 
    end 

    get '/' do 
    #print all the sessions again. And I can't see anything. The session_id is also different 
    end 
end 
+0

私はあなたのコードを単純化してここで実行するとうまくいきます。追加データを提供できますか?申し訳ありませんが、Cookie *はブラウザで有効になっています。あなたはHTTPヘッダーを見てみましたか? –

+1

セッションがリセットされているということは、それが[攻撃防御](http://www.sinatrarb.com/intro.html#Configuring%20attack%20protection)と関係があることを示唆しています。 'disable:protection'を追加して、それが何か変わるかどうか確認してください。 (保護を無効にしておくことはお勧めしませんが、何が起こっているのかを判断するのに役立ちます)。 – matt

+0

お互いありがとう、私はちょうどチェックして、私はサーバーが毎回再起動されるようにショットガンを実行していた。 – toy

答えて

7

です:

set :session_secret, 'super secret' 

をシナトラがアプリケーションの起動と散弾銃の再起動にランダム1を生成し、設定されていない場合には毎回の申請の前に

+1

これは素晴らしいです!それは私を助けた! – Dmitry

+1

これは5時間のデバッグの解決策でした! –

関連する問題