4

私の問題は、セッションがランダムに失われることもあれば、うまくいくこともあります。

問題は、何らかの方法でセッションを再現できるかどうかです (私のセッションは現在ログインしているユーザーです)。セッションが失敗したかどうかを確認しているだけのマスターページで何かを変更する必要があるのではないかと思いました。

コード:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["UserId"] == null)
    {
        Response.ClearContent();
        Response.Write("Not agine");
        Response.End();
    }
    else
    {
        Response.Write(Session["UserId"].ToString());
    }
}

Global.asax

  void Session_Start(object sender, EventArgs e) {
        // Code that runs when a new session is started
        if (HttpContext.Current.User != null && HttpContext.Current.User is HtUser)
        {

            HtUser user = (HtUser)HttpContext.Current.User;
            Session["UserId"] = user.UserId;
            if (user.HtDepartments.Any() && user.HtDepartments.SingleOrDefault().HtBusinessUnit != null)
            {
                int BusinessUnitId = user.HtDepartments.First().HtBusinessUnit.BusinessUnitId;
                Session["BusinessUnnitId"] = BusinessUnitId;
            }

ここでセッションのコードを見ることができます

さらに何か必要な場合は、お知らせください。

助けてくれてありがとう!

4

3 に答える 3

2

Session.Abandonメソッドを使用できます

リンク: http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx

于 2013-03-13T13:55:49.040 に答える
1

私が正しく理解している場合、ユーザーはセッションの有効期限が切れた(タイムアウトした)ときにセッションを失います。

これを防ぐには、Cookie に追加のキー (ユーザーごとの user_id と unique_hash など) を保存し、global.asax ファイルにメソッドを記述して、すべてのページの読み込みを開始し、セッションの有効期限が切れているかどうかを確認します。その場合、メソッドは Cookie キーを使用してセッションを復元し、DB に対してそれらをチェックします。

global.asax のコード例:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        // Restore session if session is lost but cookie is not
        // HttpContext.Current.Session["user_id"] == null &&
        if (HttpContext.Current.Request.Cookies["hash"] != null)
        {
            // do your job here
            RestoreSessionMethod();
        }
    }
}
于 2013-03-13T13:17:28.403 に答える
0

たとえば、セッション状態を SQL Server ではなくメモリに保持する場合は、ページを開いてデータをセッションに保存する操作を実行し、ブラウザを開いたままにして web.config ファイルを変更するか、コマンド ラインから iisreset.exe を実行できます。 .

これにより、セッション状態データがメモリからフラッシュされ、セッション状態の損失がシミュレートされます。

于 2013-03-13T13:53:31.217 に答える