记录用户登录日志
我们可以在专案中,实现用户登录日志记录。简单实现方法,如下:
在数据中建立一张表,存储一些相关的信息。
代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[LoginLog](
[LoginLogId] [int] IDENTITY(1,1) NOT NULL,
[UsersId] [int] NOT NULL,
[IP] [nvarchar](20) NOT NULL,
[ComputerName] [nvarchar](50) NULL,
[LoginTime] [datetime] NOT NULL,
[ActiveX] [bit] NOT NULL,
[Cookies] [bit] NOT NULL,
[CSS] [bit] NOT NULL,
[Languages] [nvarchar](30) NULL,
[Platform] [nvarchar](30) NULL,
[UserAgent] [nvarchar](300) NULL,
PRIMARY KEY CLUSTERED
(
[LoginLogId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT (getdate()) FOR [LoginTime]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT ((0)) FOR [ActiveX]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT ((0)) FOR [Cookies]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT ((0)) FOR [CSS]
GO
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[LoginLog](
[LoginLogId] [int] IDENTITY(1,1) NOT NULL,
[UsersId] [int] NOT NULL,
[IP] [nvarchar](20) NOT NULL,
[ComputerName] [nvarchar](50) NULL,
[LoginTime] [datetime] NOT NULL,
[ActiveX] [bit] NOT NULL,
[Cookies] [bit] NOT NULL,
[CSS] [bit] NOT NULL,
[Languages] [nvarchar](30) NULL,
[Platform] [nvarchar](30) NULL,
[UserAgent] [nvarchar](300) NULL,
PRIMARY KEY CLUSTERED
(
[LoginLogId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT (getdate()) FOR [LoginTime]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT ((0)) FOR [ActiveX]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT ((0)) FOR [Cookies]
GO
ALTER TABLE [dbo].[LoginLog] ADD DEFAULT ((0)) FOR [CSS]
GO
然后,再建立一个存储过程,对表进行插入动作。
代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_LoginLog_Insert]
(
@UsersId INT,
@IP NVARCHAR(20),
@ComputerName NVARCHAR(50),
@ActiveX BIT,
@Cookies BIT,
@CSS BIT,
@Languages NVARCHAR(30),
@Platform NVARCHAR(30),
@UserAgent NVARCHAR(300)
)
AS
BEGIN TRANSACTION
INSERT INTO [dbo].[LoginLog]([UsersId],[IP],[ComputerName],[LoginTime],[ActiveX],[Cookies],[CSS],[Languages],[Platform],[UserAgent]) VALUES (@UsersId,@IP,@ComputerName,GETDATE(),@ActiveX,@Cookies,@CSS,@Languages,@Platform,@UserAgent)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
END
COMMIT TRANSACTION
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_LoginLog_Insert]
(
@UsersId INT,
@IP NVARCHAR(20),
@ComputerName NVARCHAR(50),
@ActiveX BIT,
@Cookies BIT,
@CSS BIT,
@Languages NVARCHAR(30),
@Platform NVARCHAR(30),
@UserAgent NVARCHAR(300)
)
AS
BEGIN TRANSACTION
INSERT INTO [dbo].[LoginLog]([UsersId],[IP],[ComputerName],[LoginTime],[ActiveX],[Cookies],[CSS],[Languages],[Platform],[UserAgent]) VALUES (@UsersId,@IP,@ComputerName,GETDATE(),@ActiveX,@Cookies,@CSS,@Languages,@Platform,@UserAgent)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
END
COMMIT TRANSACTION
在aspx.cs中,当验证用户登录成功之后,再执行下面这个方法,把相关资讯存入LoginLog表中
代码
private void RecordLoginLog(string usersId)
{
string ip = objInsusNetUtility.GetClientIpAddress();
string computerName = Dns.GetHostEntry(ip).HostName;
bool activeX = Request.Browser.ActiveXControls;
bool cookie = Request.Browser.Cookies;
bool cSS = Request.Browser.SupportsCss;
string language = Request.UserLanguages[0];
string platform = Request.Browser.Platform;
string userAgent = Request.UserAgent ;
objLoginLog.Insert(usersId, ip, computerName,activeX,cookie,cSS,language,platform,userAgent);
}
{
string ip = objInsusNetUtility.GetClientIpAddress();
string computerName = Dns.GetHostEntry(ip).HostName;
bool activeX = Request.Browser.ActiveXControls;
bool cookie = Request.Browser.Cookies;
bool cSS = Request.Browser.SupportsCss;
string language = Request.UserLanguages[0];
string platform = Request.Browser.Platform;
string userAgent = Request.UserAgent ;
objLoginLog.Insert(usersId, ip, computerName,activeX,cookie,cSS,language,platform,userAgent);
}
上面LoginLog类别中,它有一个INSERT()方法
代码
public void Insert(string usersId, string ip, string computerName, bool activeX, bool cookies, bool css, string languages, string platform, string useragent)
{
Parameter[] parameter = {
new Parameter("@UsersId",SqlDbType.Int,4,ConvertData.ToInt(usersId)),
new Parameter("@IP",SqlDbType.NVarChar,20,ip),
new Parameter("@ComputerName",SqlDbType.NVarChar,50,computerName),
new Parameter("@ActiveX",SqlDbType.Bit,1,activeX),
new Parameter("@Cookies",SqlDbType.Bit,1,cookies),
new Parameter("@CSS",SqlDbType.Bit,1,css),
new Parameter("@Languages",SqlDbType.NVarChar,30,languages),
new Parameter("@Platform",SqlDbType.NVarChar,30,platform),
new Parameter("@UserAgent",SqlDbType.NVarChar,300,useragent),
};
objBusinessBase.ExecuteProcedure("usp_LoginLog_Insert", parameter);
}
{
Parameter[] parameter = {
new Parameter("@UsersId",SqlDbType.Int,4,ConvertData.ToInt(usersId)),
new Parameter("@IP",SqlDbType.NVarChar,20,ip),
new Parameter("@ComputerName",SqlDbType.NVarChar,50,computerName),
new Parameter("@ActiveX",SqlDbType.Bit,1,activeX),
new Parameter("@Cookies",SqlDbType.Bit,1,cookies),
new Parameter("@CSS",SqlDbType.Bit,1,css),
new Parameter("@Languages",SqlDbType.NVarChar,30,languages),
new Parameter("@Platform",SqlDbType.NVarChar,30,platform),
new Parameter("@UserAgent",SqlDbType.NVarChar,300,useragent),
};
objBusinessBase.ExecuteProcedure("usp_LoginLog_Insert", parameter);
}