Windows MobileSQL Server 2000DBAVisual Studio .NET 2003.NET 1.1Windows 2000Windows XP中级开发Visual StudioSQL ServerSQLWindows.NETASP.NETC#
使用 C# 进行自定义 Web 访问者跟踪






1.29/5 (16投票s)
2004 年 9 月 7 日
2分钟阅读

71877

1171
当 IIS 日志不足以进行您的网站分析时,您可以使用这种简单的技术来跟踪网页访问者的额外数据。
引言
当您想要收集有关网站访问者和客户端平台更多的数据,而这些数据未由 IIS 日志文件提供时,您可以使用这种简单的技术来实现。 如果您能够从服务器端收集数据,并且完全控制服务器端页面创建代码,那么您可能根本不需要这种技术。
背景
我开始这项简单的任务是因为我想跟踪 IIS 日志未记录的网页文档 ID(顺便说一下,我们的网站内容在 JSP 中是动态的,每个页面都有唯一的 ID)。 每当用户在我们的网站中浏览页面时,我们都希望跟踪他/她正在访问的文档 ID。 收集到的数据存储在 SQL Server 中。
使用代码
1.
确定您想要收集的数据类型。(IIS 日志提供客户端浏览器信息和平台信息。 您可以使用基本的 Web 日志工具来提取此信息。) 在我们的例子中,文档 ID、时间戳和 URL 引用器是我们想要收集的数据。
2.
创建一个数据库表,其中包含您正在捕获的数据字段。 您还需要创建一个存储过程来插入数据。
3.
在您尝试跟踪信息的网页中包含以下 HTML 代码:<img src='http://servername/dirname/webform.aspx?param1=val1¶m2=val2' width="0" height="0">。 这里高度和宽度属性为 0,因为源不是实际的图像。 我们正在欺骗浏览器使用图像标签请求此页面。
4.
编写一个 aspx 应用程序,并在 Form load 函数中提取查询字符串值并将它们插入到数据库中。/*Script for generating DB object for the sample project
attached. Copy paste the following section in to your sql server
enterprise manager and run it. */
if exists (
select * from dbo.sysobjects
where id = object_id(N'[dbo].[usr_log]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[usr_log]
GO
if exists (
select * from dbo.sysobjects
where id = object_id(N'[dbo].[UsrLog]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[UsrLog]
GO
CREATE TABLE [dbo].[UsrLog] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[timesmp] [datetime] NULL ,
[Platform] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[BrowserVersion] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ClrVersion] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[IsCrawler] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[RemoteHost] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [usr_log]
@Platform varchar(256),
@BowserVersion varchar(256),
@ClrVersion varchar(256),
@IsCrawler varchar(256),
@RemoteHost varchar(256)
AS
BEGIN
insert into UsrLog (Platform,
BrowserVersion,
ClrVersion,
IsCrawler,
RemoteHost)
values (@Platform ,
@BowserVersion,
@ClrVersion,
@IsCrawler,
@RemoteHost)
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO