[ASP.NET]記錄使用者登入登出時間

  • 8223
  • 0

摘要:記錄使用者登入登出時間

這是一個客戶的需求

要求記錄使用者的使用時間,因此就必須要記錄留在系統的時間

登入時間沒問題,但是使用者並不是每個都那麼乖,乖乖的按下登出(我自己都這樣了)

因此就要想辦法攔截到window close的事件

但是window close是client的狀態,並不會跟server溝通,所以就要想辦法自己通知了

首先先找到攔截window close的事件 window.onunload

然後再來找怎麼通知server,之前有看過CallBack的作法

想說用XmlHTTP,或許可行

後來找到強者連JavaScript都寫好了

www.blueshop.com.tw/board/show.asp

稍微修改一下把javascript寫進masterpage(這點或許以後再加工包進去server,這樣連要記錄的page都可以參數化)


    <script type="text/javascript" language="javascript">
   
    window.onunload = CloseWindows;
    function CloseWindows()
    {
        //按下X關閉
        if (event.clientY < 0)
        {
                 try
                 {   
                     var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
                     //使用者自行關閉視窗時
                     xmlhttp.open("POST","CloseWindows.aspx", false);
                     xmlhttp.send(); 
                     return true;
                }
                catch(e)
                {
                     alert('close windows error message:' + e.message);
                }
        }
    }
   
    </script>


然後在新增一個CloseWindows.aspx

因為還沒有決定DB要怎麼記錄,所以我就先用log4net記錄


    private ILog logger = LogManager.GetLogger("RollingFileAppender");

    protected void Page_Load(object sender, EventArgs e)
    {
        logger.Info("使用者關閉視窗!!");
    }


出來的結果

2009-07-02 10:43:59,723 INFO  RollingFileAppender d:\WebApp\VS2008\SFA\CloseWindows.aspx.cs21 [(null)]
  使用者關閉視窗!!