1

ASP.Net cookieless セッションを使用しているため、ユーザーが以下の URL にアクセスした場合など、302 リダイレクトを介して URL に配置することでアプリケーションのセッション ID を追跡できます。

http://yourserver/folder/default.aspx

その後、次のような URL にリダイレクトされ、実際のページ コンテンツの提供に進みます。

http://yourserver/folder/(S(849799d1-7ec0-41dc-962d-a77e1b958b99))/default.aspx

私が抱えている問題は、アプリケーションのエントリ ポイントが実際には静的ページ(.html 拡張子を持つページなど) であり、ASP.Net がセッション ID を発行せず、このページのユーザーをリダイレクトしないことです。 つまり、ASP.Net がホストするコンテンツ (リンク、iframe など) へのリンクが作成されると、これらのリンクごとに新しいセッション ID が作成されます。互換性の理由から、ページの拡張子を簡単に変更することはできません (ただし、これで問題は解決します)。

ページのセッションを作成するように ASP.Net に指示するにはどうすればよいですか? ページが ASP.Net モジュールによって確実に処理されるように、明示的なハンドラー マッピングを追加しようとしましたが、影響はありません。デバッグ中にSessionIDManager、このページのインスタンスが作成されていることがわかります (ASP.ハンドラー マッピングに関係なく、Net は既に統合パイプラインを介してこのページを処理していますが、ASP.Net はまだこのページのセッションを作成していません。

IIS 7 を使用していますが、IIS 6 (明示的なハンドラー マッピングを使用) および IIS 8 でも動作する必要があります。

4

1 に答える 1

0

ASP.Netソースの実験と逆コンパイルから、リクエストのが実装されているかどうかSessionStateModuleに基づいて、リクエストのセッションを作成するかどうかを決定することがわかりました。どちらも当てはまらない場合は、誰かがセッション状態の動作をまたはのいずれかに設定したかどうかにかかっています。IHttpHandlerIRequiresSessionStateIReadOnlySessionStateSetSessionStateBehaviorRequiredReadOnly

デフォルトでは、静的ファイルハンドラーはこれらのいずれも実行しないため、静的ファイル用にセッションは作成されません-セッション状態を必要とする静的ファイルに対してセッション状態の動作が設定されるようにするには、BeginRequestイベント中にセッション状態の動作を設定するだけですアプリケーション用

// In Global.asax.cs
void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Default);
}

もっと良い方法があると思いますが、これは私にとってはうまくいきました。

于 2012-10-29T16:39:05.473 に答える