Lấy thông tin chi tiết từ người dùng viếng thăm website của bạn ppsx

23 442 0
Lấy thông tin chi tiết từ người dùng viếng thăm website của bạn ppsx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lấy thông tin chi tiết từ người dùng viếng thăm website của bạn Đã bao giờ bạn muốn xem những ai đang duyệt website của bạn vào một thời điểm thực không? Họ có bao nhiêu người? Họ sử dụng trình duyệt gì? Họ từ đâu đến? Địa chỉ host và tên host của họ là gì? Và chính xác trang nào mà họ đang đọc. Tất cả một cách thật chi tiết, nếu bạn muốn như thế thì article này chính là dành cho bạn. Chúng ta sẽ học gì trong article này? Những chủ đề dưới đây sẽ được đề cập: • Làm thế nào để đếm số người đang duyệt website? • Làm thế nào để đếm tất cả số người dùng truy cập vào website kể từ khi ứng dụng web được bắt đầu? • Làm thế nào để biết thời điểm cuối cùng mà ứng dụng khởi động lại? • Làm thế nào để giữ được thông tin mỗi người dùng trên site? Chúng ta làm gì trong article này? Chúng ta sẽ tạo và chỉnh sửa bốn file sau đây: • viewSessions/default.aspx (file ASP.NET) • viewSessions/UserInfo.cs (file C#) • Global.asax (file ứng dụng ASP.NET) • viewSessions/compiled.bat Để biên dịch file nguồn thongtinUser.cs, chúng ta sẽ tạo một file .bat (batch). Một khi đã biên dịch, chúng ta sẽ có một file Stardeveloper.Test1.dll trong thư mục bin. Đây là screenshot khi chạy ứng dụng trên local host, và xem trang viewSessions/default.aspx Global.asax Bắt đầu bằng việc tạo ra file “Global.asax” . Đây là file chính cho ứng dụng của chúng ta nhưng nó sẽ không hiển thị đối với người dùng cuối. Global.asax là một file chứa sự kiện ứng dụng (application event) cho các trang ASP.NET gần giống với Global.asa trong các trang ASP. File này chứa các application event mà bạn có thể override để sử dụng cho chính bạn. Global.asax chứa các event nhiều hơn file gốc Global.asa. Nếu bạn là một người mới, và bạn không biết application event là gì, thì application event là những hành động xảy ra trong một ứng dụng web, như khi ứng dụng bắt đầu, khi ứng dụng kết thúc, khi nhận được một request, khi một response được tạo ra… Những gì chúng ta có thể làm là đặt một vài đoạn mã cho những event đó nếu chúng ta muốn sử dụng chúng. Ví dụ như nếu chúng ta muốn ghi lại thời gian ứng dụng của chúng ta bắt đầu, chúng ta cần sử dụng event “bắt đầu ứng dụng”. Ứng dụng xem session của chúng ta sử dụng những event sau đây: • Application_OnStart: gọi khi ứng dụng được bắt đầu • Session_OnStart: gọi khi session của một user mới được bắt đầu • Session_OnEnd: gọi khi session của một user tồn tại kết thúc hoặc chương trình thoát một cách tự động • Application_OnPostRequestHandlerExecute: gọi khi request được xử lý bởi Request Handler và HttpSessionState có sẵn. Tạo hoặc chỉnh sửa file “Global.asax” và chắc chắn rằng nó chứa các dòng mã dưới đây cho bốn application event. Nếu bạn đã có sẵn mã cho các event này trong file Global.asax của bạn, thì bạn chỉ cần chỉnh sửa lại các method event cho đúng với đoạn mã của chúng ta. <%@ Import namespace="Stardeveloper.Test" %> <%@ Application Debug="true" %> <script language="C#" runat="server"> public void Application_OnStart(Object sender, EventArgs e) { Hashtable ht = (Hashtable)Application["SESSION_LIST"]; if(ht == null) { ht = new Hashtable(); lock(Application) { Application["SESSION_LIST"] = ht; Application["APP_START_TIME"] = DateTime.Now; Application["TOTAL_SESSIONS"] = 0; } } } public void Session_OnStart(Object sender, EventArgs e) { UserInfo ui = new UserInfo(); Session["USER_INFO_MAP"] = ui; Hashtable ht = (Hashtable)Application["SESSION_LIST"]; if(ht.ContainsKey(Session.SessionID) == false) { ht.Add(Session.SessionID, Session); } lock(Application) { int i = (int)Application["TOTAL_SESSIONS"]; i++; Application["TOTAL_SESSIONS"] = i; } } public void Session_OnEnd(Object sender, EventArgs e) { Session.Clear(); Hashtable ht = (Hashtable)Application["SESSION_LIST"]; ht.Remove(Session.SessionID); } public void Application_OnPostRequestHandlerExecute(Object sender, EventArgs e) { try { UserInfo ui = (UserInfo)Session["USER_INFO_MAP"]; if(ui != null && Session.IsNewSession) { try { if(Request.UrlReferrer != null) { ui.URLReferrer = Request.UrlReferrer.ToString(); } ui.UserAgent = Request.UserAgent; ui.HostAddress = Request.UserHostAddress; ui.HostName = Request.UserHostName; } catch (Exception) { } } if(ui != null) { ui.URLViews.Add(Request.RawUrl); } } catch(Exception) { } } </script> Giải thích <%@ Import namespace = “Stardeverloper.Test” %> Dòng đầu tiên là một phát biểu bổ sung trực tiếp namespace “Stardeverloper.Test”. Chúng ta làm điều này để bổ sung lớp UserInfo sẽ được tạo ra sau này trong article. <%@ Application Debug = “true” %> Đây là một ứng dụng trực tiếp, và chúng ta sử dụng nó để ấn định thuộc tính “Debug” là “true”. Điều này có nghĩa là nếu có một vài đoạn mã bị sai, và trình biên dịch không thể biên dịch đoạn mã này thì bạn sẽ được xem chính xác dòng mã nào gây ra lỗi đó. <script language = “C#” runat = “server”> … </script> Tất cả mã cho Global.asax sẽ được đặt trong thẻ <script> và </script>. Thuộc tính “language” sẽ xác định ngôn ngữ bạn sẽ viết mã giữa những thẻ này, trong trường hợp của chúng ta là C#. Thuộc tính “runat” phải là “server” bởi vì đoạn mã của chúng ta sẽ chạy trên server. Phần này giải thích cụ thể về đoạn mã trong Global.asax và trong file UserInfo.cs public void Application_OnStart(Object sender, EventArgs e) { Hashtable ht = (Hashtable)Application["SESSION_LIST"]; if(ht == null) { ht = new Hashtable(); lock(Application) { Application["SESSION_LIST"] = ht; Application["APP_START_TIME"] = DateTime.Now; Application["TOTAL_SESSIONS"] = 0; } } } Trong Application_OnStart, đầu tiên chúng ta nhìn vào đối tượng System.Collections.Hashtable tồn tại trong đối tượng Application. Như bạn đã biết, đối tượng Application được cung cấp cho toàn bộ các file ASP.NET và thay thế cho toàn bộ ứng dụng. Nó rất hữu dụng và chứa những thông tin cụ thể về ứng dụng. Ở đây chúng ta sử dụng nó để lưu trữ và nhận những đối tượng của chúng ta mà chúng ta muốn giữa các request và các session của người dùng. Nếu Hashtable đó không được tìm thấy thì chúng ta tạo ra một cái Hashtable mới và lưu nó vào trong đối tượng Application sử dụng khóa “SESSION_LIST”. Để biết khi nào ứng dụng của chúng ta bắt đầu, chúng ta lưu lại ngày tháng hiện tại sử dụng khóa “APP_START_TIME”. Đối tượng cuối cùng mà chúng ta lưu là một số nguyên thay thế tổng số người dùng duyệt website kể từ khi ứng dụng được khởi động lại. Thông tin này được lưu trong khóa “TOTAL_SESSIONS” public void Session_OnStart(Object sender, EventArgs e) { UserInfo ui = new UserInfo(); Session["USER_INFO_MAP"] = ui; Hashtable ht = (Hashtable)Application["SESSION_LIST"]; if(ht.ContainsKey(Session.SessionID) == false) { ht.Add(Session.SessionID, Session); } lock(Application) { int i = (int)Application["TOTAL_SESSIONS"]; i++; Application["TOTAL_SESSIONS"] = i; } } Kế tiếp, chúng ta viết mã cho sự kiện Session_OnStart. Đầu tiên chúng ta tạo ra một đối tượng Stardeveloper.Test.UserInfo. Đối tượng này sẽ được tạo cho mỗi session và sẽ chứa thông tin về mỗi session cụ thể như tên host, địa chỉ host, URL mà người dụng đang xem… Sau đó chúng ta lưu đối tượng UserInfo vào đối tượng Session sử dụng khóa “USER_INFO_MAP”. Đối tượng Session làm việc gần giống như đối tượng Application khi nó cũng lưu và nhận vào các đối tượng. Nhưng Session chỉ chứa những đối tượng cho vòng đời của một session, trong khi Application chỉ chứa những đối tượng cho vòng đời của một ứng dụng. Kế tiếp chúng ta nhận vào mã Hashtable mà chúng ta đã lưu trước đó trong đối tượng Application và giả sử rằng nó không chứa một Session mới này, chúng ta sẽ thêm vào Session đang tồn tại này vào trong Hashtable của ứng dụng. Điều này cho phép chúng ta lưu lại tất cả những đối tượng Session của người dùng trong đối tượng Hastable. Và tại sao chúng ta làm điều này? Đó là vì để nhận được tất cà các session hiện tại và hiển thị thông tin của chúng. Tiếp đó, chúng ta khóa đối tượng Application (để ngăn nó bị chỉnh sửa bởi nhiều thread vào cùng một thời điểm) và tăng biến đếm “TOTAL_SESSIONS” public void Session_OnEnd(Object sender, EventArgs e) { Session.Clear(); Hashtable ht = (Hashtable)Application["SESSION_LIST"]; ht.Remove(Session.SessionID); } [...]... UserInfo từ Session và giả sử rằng đó là lần đầu tiên người dùng truy cập vào bất kỳ trang nào trong website của chúng ta (chúng ta làm điều này bằng cách sử dụng thuộc tính Session.IsNewSession) Chúng ta sẽ chuyển cho đối tượng UserInfo những giá trị khác nhau nhận được từ đối tượng Request Nếu đối tượng Session này không phải mới, thì chúng ta chỉ thêm URLvào danh sách các URL đã được xem trong Session của. .. của chúng ta Sau đó là viết mã cho 5 thuộc tính của lớp UserInfo Phần này trình bày về file default.aspx là phần chính để hiển thị thông tin trong application Default.aspx Giờ đã đến lúc viết mã cho trang default.aspx Trang này sẽ hiển thị thông tin về tất cả người dùng từ những đối tượng đã được lưu trong các đối tượng đã lưu trong Application và Session . Lấy thông tin chi tiết từ người dùng viếng thăm website của bạn Đã bao giờ bạn muốn xem những ai đang duyệt website của bạn vào một thời điểm thực không? Họ có bao nhiêu người? Họ. gì? Họ từ đâu đến? Địa chỉ host và tên host của họ là gì? Và chính xác trang nào mà họ đang đọc. Tất cả một cách thật chi tiết, nếu bạn muốn như thế thì article này chính là dành cho bạn. Chúng. dưới đây sẽ được đề cập: • Làm thế nào để đếm số người đang duyệt website? • Làm thế nào để đếm tất cả số người dùng truy cập vào website kể từ khi ứng dụng web được bắt đầu? • Làm thế nào

Ngày đăng: 13/08/2014, 11:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan