系统操作日志

   1、  我想实现:

  我想设置一个JSP程序,只要有用户登陆网站(管理员或非法的),不管登录成功或失败都把登陆的用户名(登陆信息,执行页面)记录到数据库中,还有登陆后台后对网站的修改也要做个记录,比如修改过新闻,删除留言,修改过网站配置等都有记录,不要求可恢复,能记录七天,或是1000条记录这样就可以了.多的记录可以自动删除....类似的功能该如何实现?

   ————思路:

  a, 写个公用函数:
function doRecordLog(username, action, content)
    ' 该函数内部实现记录用户操作日志功能
end function
 b, 各页面需要记录日志的操作都调用这个函数.

————思路2:

   四种办法:

a.每页生成一个不同session,如果该页结束,将值付给变量传递到数据库保存。
b.为每条记录设置新建时的日期,修改时的日期,分别保存在数据库中,显示在管理页面,如果看到哪条记录是新修改的,就会是新的日期,新建的日期是不会变的。
c.放置一个访问统计页,统计每位后台管理者访问过的路径,我有用访问统计,能查看到来者的每个脚印,和对方的IP,不过是用在前台,当然后台也可以用的。
d.如果你想控制管理者的操作权限,可以设置多个管理组,为不同的组设置不同的管理权限,就像window一样,有管理员权限和guest权限,这样有些用户只能看而不能修改。

我就一直用第二种办法,查看更新情况的。

 

CREATE TABLE eventlog(
cid int primary key not null,
csort varchar(50) null,
cusername varchar(50) null,
ctime datetime,
cdo varchar(250) null,
cip varchar(20)
)

程序
先调用数据库
然后
<%
Function events(csort,cusername,cdo)
cip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If cip = "" Then
cip = Request.ServerVariables("REMOTE_ADDR")
End If
ctime=now()
safesql="select * from tb_eventlog"
set rsyss=server.CreateObject("adodb.recordset")
rsyss.open safesql,con,1,3
rsyss.addnew
rsyss("csort")=csort
rsyss("cusername")=cusername
rsyss("cdo")=cdo
rsyss("ctime")=ctime
rsyss("cip")=cip
rsyss.update
rsyss.close
End Function
%>

 

不就写日记吗?

一般比较合理的作法是,先将操作中进行一闪的格式。
比如:一个管理员对数据库做了一些调整,他删除了某一个用户,那么在删除用户的同时应该向日志中记录。

这个肯定是管理员,首先它是登陆的,那么可以用session("userID")保存其登陆状态的,同时取出该值,向日记数据库中记录,这样首先做到了定位人的目的,当然这个操作是在删除用户中进行的,那么可以在动作中注明的。所以数据库的建立很清楚了:
userid      datetime     active
userid是用存放是谁做的动作
datetime用来存放在何时的动作
active用来指明动作,比如删除用户等文本方式存储
如有需要可以对该数据表进行扩充。
管理员在删除用户时,先将动作写入了日记数据库,然后才开始做删除用户的动作。这样完全记录了管理员的动作。

访问网页,可以在登陆后进行的。
比如有一个网页是abc.asp
那么在abc.asp最开始的地方测试session("userid")如果存在则,向日记数据库中插入记录,userid插入session("userid"),当前时间插入到datetime中,将字符串“访问了abc网页”插入到active中,这样你取出记录可以看到,某一用户在某一时间,访问了abc网页。当然如果访问网页过多,可以将这一段写出来,导入到每个网页中。就可以了!

至于怎么控制网页的开始,这是一个重定向的问题。
比如,你在后台中写了关闭网站中的某个页面,则可以用一个application("vis")变量来控制。点击关闭时,执行了一个事件,application("vis")="false",反之,将这个值取为true,在application-start事件中先义其打开或关闭。

运行该网页时最开始,去取application("vis")的值,若是true,则显示该页,不用有动作,若是false则将网页定向到另一个提示网页中!

当然,我这里是以application为例的,其实你也可以存入数据库中的,所以存入的作为配置。这样即使重启服务器也不会丢失的!只不过这里的原理就是这样!

简单不?它和写普通页面没有什么区别的!所谓的后台只不过是管理员登陆的!实际上对于开发来说是不分前台后台的。这个名词只是网页功能的区分而已!

在执行操作或进入某页时调用
<%'如在用户登录时
events "用户登录",session("username"),"成功登录后台管理"

'在信息修改时
events "企业荣誉",session("username"),"修改荣誉分类名称"

%>这样子就可以了

第二个没看懂你说的是什么意思
那你在页面前面加一个判断不就行了
先设定一个表
页面  值(0/1)
在每页

if Request.ServerVariables("SERVER_PORT")<>"80" then
     userurl = "http://"&Request.ServerVariables("SERVER_NAME")& ":" & Request.ServerVariables("SERVER_PORT")& Request.ServerVariables("URL")
    else
     userurl = "http://"&Request.ServerVariables("SERVER_NAME")& Request.ServerVariables("URL")
end if
取你的网址
userurl=right(UserUrl,InstrRev(UserUrl,"/")+1)取你网址中的网页名
然后
读你表里网页名相同的 在进行判断 如果值为0就是关闭了如果值为1就是可以看
你后台里在做一个页来控制页是否关闭就行了

   ——————————操作日志————————

    a、 日志里大概会记录:谁在什么时间什么地方做了什么操作
所以写一个类似的过程,addlog(user,time,place,operate)在需要记录的地方调用即可.
比如要记录登陆过程,则在登陆完成之后记录,登陆的用户名,时间,(这里地方可以不记录了,因为应该只有一个登陆点吧),操作则是登陆.
其他地方类似的如此调用去记录.

b、 我是放在一个单独的日志文件里的,按日期来命名
procedure WriteToTxt(content:string);
var
F: Textfile;
path,name:string;
begin
  name:=FormatDateTime('yyyy-mm-dd',now);//取得日期
    path:=ExtractFilePath(Application.ExeName)+'log/'+ name+'.txt';//日志存取路径
    AssignFile(F,path);
    if FileExists(path) =False then
    ReWrite(F);
    Append(F);
    Writeln(F,'['+DateTimeToStr(Now())+']:'+content); //写入日志文件
    Closefile(F);
end;

在具体的操作后面调用就OK了

 

 在OA项目中,需要记录用户都进行了什么操作,事件包括增加、删除和修改,希望记录成类似以下格式:

用户XXX在2007年X月X日增加了一个产品类别XXX
用户XXX在2007年X月X日删除了一个用户XXX

现在请教大家,除了在增删改的时候另外再运行一个存储过程记录这些信息外,有没有其他什么更简单的方法啊,感谢赐教~~感谢参与~

——————解答:

用文本文件记录吧,用追加文本    我的习惯做法是在数据库中建立日志表。
再编写一些方法,在用户进行增删改查时触发。
向表中添加数据           

  可以考虑通过   HttpModule   统一处理,
但是,你得考虑如何捕获用户进行了什么操作

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值