Gobal.asax中寫一用Session記錄信息用法

<%@ Application Language="C#" %>

<script runat="server">

     
   
    private static System.Threading.Timer timer;
    private string updatetime = ConfigurationManager.ConnectionStrings["UpdateTime"].ConnectionString;
    private string logintimeout = ConfigurationManager.ConnectionStrings["LoginTimeOut"].ConnectionString;
    private  int interval = 1000 * 60 * 5;//檢查在線用戶的間隔時間.默認爲5分鐘
    private int SessionTimeOut = 5;

    void Application_Start(object sender, EventArgs e)
    {
        // 在應用程序啓動時運行的代碼
        try
        {
            interval =1000*60* Convert.ToInt32(updatetime);
        }
        catch
        {
            interval = 1000 * 60 * 5;
        }

        try
        {
            SessionTimeOut = 1000 * 60 * Convert.ToInt32(logintimeout);
        }
        catch
        {
            SessionTimeOut = 5;
        }
       
        System.Data.DataTable userTable = new System.Data.DataTable("UserTable");
        userTable.Columns.Add("SessionID");//用戶SessionID
        userTable.Columns.Add("PersonName");//用戶名
        userTable.Columns.Add("PersonDesc");//用戶姓名
        userTable.Columns.Add("FirstRequestTime");//第一次請求的時間
        userTable.Columns.Add("ClientIP");//客戶端IP
        userTable.Columns.Add("LastRequestTime");//最近一次訪問的時間
        userTable.Columns.Add("ClientComputerName");//客戶機器名
        //userTable.Columns.Add("LastRequestPath");//最後訪問的頁面
        userTable.PrimaryKey = new System.Data.DataColumn[] { userTable.Columns[1] };
        userTable.AcceptChanges();

        Application.Lock();
        Application["UserOnLine"] = userTable;
        Application.UnLock();       
        ///
        //OAShell.OAMedia oaMedia = new OAShell.OAMedia();
        //oaMedia.DeleteDirectory( Server.MapPath(Request.ApplicationPath) + "//" + "Document");
       
        //用於記錄留言用用戶
        System.Data.DataTable messageUser = new System.Data.DataTable("MessagUser");
        messageUser.Columns.Add("SessionID");//用戶SessionID
        messageUser.Columns.Add("UserName");//用戶名
        messageUser.Columns.Add("UserDesc");//用戶姓名
        messageUser.Columns.Add("FirstRequestTime");//第一次請求的時間
        messageUser.Columns.Add("ClientIP");//客戶端IP
        messageUser.Columns.Add("LastRequestTime");//最近一次訪問的時間
        messageUser.Columns.Add("ClientComputerName");//客戶機器名
        //userTable.Columns.Add("LastRequestPath");//最後訪問的頁面
        messageUser.PrimaryKey = new System.Data.DataColumn[] { messageUser.Columns["UserName"] };
        messageUser.AcceptChanges();

        Application.Lock();
        Application["MessageUser"] = messageUser;
        Application.UnLock();
       
        if (timer == null)
            timer = new System.Threading.Timer(new System.Threading.TimerCallback(ScheduledWorkCallback),
                sender, 0, interval);
    }
   
    void Application_End(object sender, EventArgs e)
    {
        //  在應用程序關閉時運行的代碼
        //OAShell.OAMedia oaMedia = new OAShell.OAMedia();
        //oaMedia.DeleteDirectory(Server.MapPath(Request.ApplicationPath) + "//" + "Document");
    }
       
    void Application_Error(object sender, EventArgs e)
    {
        // 在出現未處理的錯誤時運行的代碼

    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新會話啓動時運行的代碼
        SessionTimeOut = Session.Timeout;

    }

    void Session_End(object sender, EventArgs e)
    {
        // 在會話結束時運行的代碼。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式設置爲
        // InProc 時,纔會引發 Session_End 事件。如果會話模式設置爲 StateServer
        // 或 SQLServer,則不會引發該事件。

        System.Data.DataTable userTable = (System.Data.DataTable)Application["UserOnLine"];
        for (int i = userTable.Rows.Count - 1; i >= 0; i--)
        {
            if ((Session.SessionID != null) && (Session.SessionID == userTable.Rows[i]["SessionID"].ToString()))
            {
                userTable.Rows[i].Delete();
                break;
            }
        }
        userTable.AcceptChanges();
        Application.Lock();
        Application["UserOnLine"] = userTable;
        Application.UnLock();

    }

   //定時清除過時的信息Gobal.asax中寫一Session用記錄信息用法

    private void ScheduledWorkCallback(object sender)
    {
        string filter = "Convert(LastRequestTime,'System.DateTime') < Convert('" + System.DateTime.Now.AddSeconds(-SessionTimeOut * 60).ToString() + "','System.DateTime')";
        System.Data.DataTable userTable = (System.Data.DataTable)Application["UserOnLine"];
        System.Data.DataRow[] lineOutUsers = userTable.Select(filter);
        for (int i = 0; i < lineOutUsers.Length; i++)
        {
            System.Data.DataRow curRow = lineOutUsers[i];

            //保存到數據庫

            curRow.Delete();

        }
        userTable.AcceptChanges();

        Application.Lock();
        Application["UserOnLine"] = userTable;
        Application.UnLock();
       
        //
        //string filter = "Convert(LastRequestTime,'System.DateTime') < Convert('" + System.DateTime.Now.AddSeconds(-SessionTimeOut * 60).ToString() + "','System.DateTime')";
        System.Data.DataTable messageUser = (System.Data.DataTable)Application["MessageUser"];
        System.Data.DataRow[] messageUsers = messageUser.Select(filter);
        for (int i = 0; i < messageUsers.Length; i++)
        {
            System.Data.DataRow curRow = messageUsers[i];
            curRow.Delete();

        }
        messageUser.AcceptChanges();

        Application.Lock();
        Application["MessageUser"] = messageUser;
        Application.UnLock();
    }

      
</script>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章