Asp.Netのセッション

1941 ワード

Sessionはずっと使っていて何の異常も発見されていません今日はプログラムがSessionに必要です.End()イベントで異常が発見された場合は、次のテストを行います.
前提は次のとおりです.
Web.configでsessionstateモードを「InProc」に設定すると、Session_がトリガーされます.Endイベント
プログラムページでセッションを使用するには:
System.Web.HttpContext.Current.Session["user_id"] = UserID

はい.csページで取得する方法は

        public static int GetLoginUserID()
        {
               //    
                if (System.Web.HttpContext.Current.Session["user_id"] != null)
                {
                    return Convert.ToInt32(System.Web.HttpContext.Current.Session["user_id"]);
                }
                else{
                        return -1;
                     }
        }

Globalでascxファイルのセッション_End()イベント呼び出し

      protected void Session_End(object sender, EventArgs e)
        {
            string userid= this.Session["user_id"].ToString();
            string CSUserid = GetLoginUserID();
        }

Session["user_id"]には既にページに値が割り当てられています
System.Web.HttpContext.Current.Session["user_id"]=123;

ただし、実行結果はuserid=123ですが、CSUseridはエラーを報告します(このオブジェクトはコンテキストで無効です).
結論:CsファイルではSystemにアクセスするしかない.Web.HttpContext.Current.Session[name]はSession値を取得する(一家の言叶ではSessionを取得しglobalファイルに呼び出す方法があるかどうか分からないが、异议があれば斧正を歓迎する)しかしGlobalファイルではSystemにアクセスできない.Web.HttpContextネーミングスペースはもちろん、最も一般的なResponse、Requestなどのページレベルのネーミングスペースにもアクセスできません.this.Session["user_id"]これで直接値を取得できます
少し補足していますね:
このテストの過程でSessionも使いましたスタートイベントSession_End
1つのサイトのすべてのSession変数がすべて期限切れになったときSession_Endイベントトリガセッション_Startは、すべてのSessionが期限切れになっている場合、Session変数がまったく存在しない場合、最初のSession変数が確立されたときにSession_をトリガーします.スタートイベント(1つ目が作成されたときにのみトリガーされますね)複数ある場合、その後のセッション変数の作成はセッションをトリガーしません.スタートイベント