Windows 統合認証が有効になっているクラスター化された環境で動作している .Net アプリケーションがあります。この時点まで、アプリケーションの「状態」を追跡するために Session が使用されているという事実を除いて、正常に動作しています。残念ながら、ユーザーは複数のブラウザー タブでアプリケーションの複数のインスタンスを開いています。ご存知かもしれませんが、IE はタブを個別のインスタンスとして扱いません。これにより、追跡に問題が発生しています。これを回避するために、cookieless="UseUri"
ディレクティブを Web.config に追加しましたが、問題なく動作しているようです。問題は、特定の時点でアプリケーションが認証資格情報を再度要求することです。これはダブルホップ認証に似ていると思います問題ですが、URI の一部としてセッションを追跡するとこの動作が発生する理由を特定できませんでした。舞台裏で何が起こっているのですか? また、この動作をオーバーライド/防止するにはどうすればよいですか?
ブラウザのタブ間でセッションを単純に分離するためのより良い方法があれば、私もそれを望んでいると思います.
編集: フォローアップとして、この問題はクライアント側スクリプトからの WebMethod への特定の呼び出しに関連していることに気付きました (例: mainScreen.ServerMethod("cv0_value", "1");
)
[System.Web.Services.WebMethod]
public static string ServerMethod(string name, string value)
{
HttpContext.Current.Session[name] = value;
}
クライアントとサーバーがセッション値を同期する方法はわかりませんが、セッション追跡に URI を使用しているときにサーバー側のセッション値を設定しようとしているために、問題が発生することは比較的直感的です。私はかなり外れているかもしれませんが、 Web.config ディレクティブを使用すると、これが可能かどうかはわかりません。Ajax と cookieless ディレクティブの使用に関連する SO に関するこの
質問
も見つけました。私はここで軌道から外れていますか?両方の能力を持つための解決策はありますか?
更新: Cookie を使用しない ASP.NET アプリケーションでの POST の有効化に関する美しい記事。
さらに更新: 上記のリンクをたどってコードを実装しようとしましたが、チェックの値ShouldRedirect()
が常に false を返すように見えるため、リダイレクトは行われません。説明は解決策としては素晴らしいように聞こえますが、これを機能させることができません。具体的には、Cookieless ディレクティブが「UseUri」または「true」に設定されているかどうかに応じて、「AspCookielessBoolSession」および「AspSessionIDManagerInitializeRequestCalled」の値が入力されます (HttpContext.Current.Items.Count は 2 または 3 として返されます)。
この時点で、ウィンドウとタブ全体でセッションを一意に維持する必要があるため、あらゆるソリューションを受け入れることができます。