私はVS2010を使用していて、単純なaspを作成しました。開発サーバーを使用してテストするWebフォームアプリケーション。
[。 'Application_AuthenticateRequest'メソッドと 'Session_Start'メソッドを使用しています。
最初のラウンド:AuthenticateRequestが呼び出されました。次のコードが実行されました。
public static void Initialize(string login_name, bool force_refresh)
{
HttpSessionState Session = HttpContext.Current.Session;
object o = Session == null ? null : Session["EMPLOYEE_DATA"];
if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name)
{
_current = UIManager.GetEmployee(login_name);
if (Session != null)
{
Session["EMPLOYEE_DATA"] = _current;
}
}
else
{
_current = (Employee)o;
}
}
_current変数は、静的プロパティを介して公開されるプライベート静的フィールドです。最初のラウンドでは、Sessionはnullですが、Session_Startがまだ呼び出されていないので、問題ないと思います。 Session_Startは次のようになります。
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
次のラウンドではもちろんSession_Startは呼び出されませんが、AuthenticateRequestではセッションにアクセスできません。 HttpContext.Current.Sessionがnullであり、this.Session参照がHttpExceptionをスローすると、「セッション状態はこのコンテキストでは使用できません」と表示されます。
ただし、どのpage_loadイベントからでもセッションにアクセスできますが、page_loadごとに認証を行うのは悪い習慣だと思います。セッションにアクセスするにはどうすればよいですか?
アドバイスをありがとう、
Péter
現時点ではバインドされていないため、Application_AuthenticateRequestでSessionを使用することはできません。
イベントApplication_AcquireRequestStateを使用できると思います。