我正在开发一个需要记录用户活动的网站 - 比如user1已登录,user2更新了一个名为ABC的东西,并将这些内容保存到数据库中。我正在寻找一些源代码和描述。我是新手,自己学习网页开发。我经常搜索但没有得到很好的答案。
答案 0 :(得分:0)
我会用Logger
static
method
写一个单身Logger::logUserAction($actionType, $actionParams)
。
nethod会在db表中插入一条新记录[action int,params text,date timestamp]。
答案 1 :(得分:0)
对于基本记录器,首先,您应该决定是否需要登录数据库或文件格式。如果日志位于数据库中,则需要创建将接收日志的数据库表。
在这两种情况下,您都需要创建一个生成日志的函数。在将此功能放入您的网站之前单独测试此功能。
完成后,您应该在Web结构,登录,数据库更改(记录对象更改)等上调用此函数。
如果使用OO架构,则日志函数可以是从PHP文件调用的static
函数,甚至是日志类。
如果您使用的是zend.log或Laravel logging等框架,则会有更多高级日志功能,但您没有提供有关您的网络应用的过多信息。
OBS:此方法适用于服务器端日志记录。要记录客户端操作(用户单击某些内容),您需要对服务器进行AJAX调用以调用日志功能。
答案 2 :(得分:0)
你可以通过多种方式实现这一目标。
对于登录/注销活动,您可以在数据库中创建名为“login_activities”的表 您可以在其中存储有关某些登录/注销活动的数据。 您可能需要以下列:
user_id(int) - 登录或注销的用户的ID
date_and_time(datetime) - 用户登录或退出的日期和时间
user_ip(varchar) - 用户登录或退出的IP
activity_name(varchar) - 这可以采用例如值“login”和“logout”,并指示用户是否登录或注销
实施例
1 | 1 | 2017-17-03 12:00:00 | 192.168.0.1 | LOGIN
2 | 1 | 2017-17-03 12:15:00 | 192.168.0.1 | LOGOUT
表格中的第一行会告诉您ID为“1”的用户,于2017年3月3日12点从ip 192.168.0.1登录。 第二行将指示ID为“1”的用户在2017-17-03 12:15h从ip 192.168.0.1注销。
在数据库中创建此表,然后在处理用户登录的代码中创建此表, 如果用户登录成功,你可以拥有这样的PHP代码,这将获得所需的数据。
$user_id = $_SESSION['user_id']; // if you stored users id into session and i suppose you did
$user_ip = $_SERVER['REMOTE_ADDR']; // will give you the ip address from which the user logged in
然后您可以执行以下sql语句将数据插入login_activities表: (这是一个简单的例子 - 使用PDO或任何其他方法来防止SQL注入!!!)
$sql = "INSERT INTO login_activities(user_id, date_and_time, user_ip, activity_name) VALUES($user_id, NOW(), $user_ip, 'LOGIN'");
用户点击页面上的注销按钮并成功注销后,在实际取消会话之前,您可以通过上述相同的方式提取用户ID和ip,并执行以下sql语句以插入数据到login_activities表:
$sql = "INSERT INTO login_activities(user_id, date_and_time, user_ip, activity_name) VALUES($user_id, NOW(), $user_ip, 'LOGOUT'");
至于更新,这是一个更具体的一点,我需要更多关于你的项目的信息,以提供更多有用的信息,但我建议使用数据库触发器。
触发器允许您在发生特定事件(SELECT,UPDATE,INSERT,DELETE)时在数据库中执行某些sql。
我建议你阅读一些关于数据库触发器的文章,因为这个概念实际上并不太难理解,对于那些想要在数据库中保存日志的情况非常有用!