0

iframeに表示されるサイト/アプリを作成しています。私は以前に何度もそれをしました、そしてそれは私に過去にたくさんの問題を引き起こしました...主な問題はクロスドメインクッキーがブロックされていることです。

同じルートドメイン名を使用し、document.domainを設定する必要があることはわかっています。しかし、素敵な新しいEU cookie法(それらは不十分です)とブラウザがプライバシーとセキュリティに関して向かっている一般的な方向性を考えると、iframeでセッションcookieを使用することはおそらくますます厄介になるでしょう。ですから、サイトを少し将来性のあるものにするために、Cookieをまったく使用せずに実装したいと思います。

これまでの実装では、クエリ文字列値を設定するだけで、すべてのページに渡されます。これは、ASP.NETのCookieなしのセッション機能と同じようなものだと思います。ただし、これは、誰かが公共のコンピューターを使用している場合、しばらくしてそれを使用している別の人が自分のURL(セッションIDを含む)を見つけてセッションを続行できることを意味します。このサイトは受け入れられない機密データを扱っているので。ASP.NETのCookieなしの機能には、同じ抜け穴があります(これにより、解決策を見つけることについて少し悲観的になります)。

私は.NETで開発していますが、これはすべての環境で一般的な問題である必要があります。

短縮版:

iframe内で実行されているCookieなしのサイトでセッション状態を維持する方法を知っている人はいますか(おそらくいくつかのベストプラクティスも)。ユーザーがブラウザを閉じるときは、セッションを効果的に強制終了する必要があるため、通常のセッションCookieの場合と同様に、ブラウザの履歴リストに情報が表示されないようにする必要があります。

考えられる解決策

私はこれらの線に沿って何かを考えています。しかし、それは最適にはほど遠いです。

  1. このページは継続的にサーバーにキープアライブajaxリクエストを送信します
  2. サーバーは、クエリ文字列に格納されているIDの最後のキープアライブ呼び出しでタイムスタンプを更新します
  3. キープアライブのタイムスタンプが10秒以上経過すると、IDに関連するデータが強制終了され、ユーザーが現在無効になっているIDでURLに再度アクセスすると、「セッションがタイムアウトしました。最初からやり直してください」というメッセージが表示されます。
4

1 に答える 1

2

同じルート ドメイン名を使用し、document.domain を設定するだけの問題であることはわかっています。

いいえ - シングル サインオンを使用する方がはるかに賢明なアプローチです (それでも Cookie を使用します)。

しかし、素敵な新しいEUクッキー法を考えると(ああ、彼らは不自由です)

特に注意事項 25 と 26 を読んでください。プライバシー情報を詳述するページを提供することは、依然として良い慣行であり、サービスであり、これは法律の下での義務を十分に満たしているか、それを超える可能性さえあります. ただし、ユーザーが Cookie を受け入れていない場所を検出し、適切に応答するようにサイトを設計してください。

Cookieをまったく使用せずに実装したいと思います。

私を信じてください、あなたはしません。URLを介したセッションIDの伝播について言及しました-これは代替に近似する唯一のものですが、言及したセキュリティの問題に加えて、非常に壊れやすく制限的でもあります(たとえば、ajax呼び出しの場合、現在の URL を解析してセッション ID を抽出し、それを後続のリクエストに挿入する必要があります)。

これはすべて、サイトがサーバー側で状態を保持する必要があることを前提としていることに注意してください (これは、機密データの言及と認証によって多少暗示されています)。

于 2011-08-31T16:33:06.610 に答える