0

jQueryを使用してSinatraアプリにログインしようとしていますが、何らかの理由でSinatraがまったく認識していないようです。ユーザーがログインしているかどうかを確認するためのコードは、次のとおりです。

シナトラアプリ:

get '/logged_in' do
    if session[:logged_in] == true
         status 200
         "OK"
    else
        status 200
        "False"
    end
end

/logged_inブラウザで参照すると表示されOKますが、次のJavascriptを実行するFalseと、コンソールに出力されます-奇妙に思えます。

var r = $.ajax({
  type: "GET",
  url: "http://xxx-xxx.com/logged_in"
});
r.success(function(msg) {
    console.log(msg);
});

どんな洞察も評価されます!

4

2 に答える 2

1

詳細を教えていただければ幸いです。(ブラウザ、HTTPステータスコードを含む時系列のリクエストログ、またはwiresharkからのダンプです。)しかし、これが私の推測です:

var r = $.ajax({
  cache: false,
  type: "GET",
  url: "/logged_in",
  success: function(msg) {
    console.log(msg);
  }
});

一部のブラウザは、AJAXリクエスト、特にGETリクエストを積極的にキャッシュします。だからあなたは試してみたいかもしれませんcache: false。後でsuccess関数を追加することも私には奇妙に思えますが、どのコードでもそれを見たことがありません。

編集:サーバーは同じドメインでAJAXリクエストに応答していますか?(ドメインはブラウザテストと同じである必要があります。)通常、URL内でドメインを指定する必要はないはずなので、ここのコードでドメインを削除しました。したがって、結局のところ、同一生成元ポリシーが原因で問題が発生する可能性があります。

于 2012-11-07T13:50:57.463 に答える
0

私はこれがSinatraの問題ではなくjQueryの問題であることに賭けます。ajaxリクエストに対してCookieが送信されていることを確認します。Cookieが送信されない理由はいくつかあります。

于 2012-11-07T10:32:46.943 に答える