我正在开发一个需要记录用户活动的网站 - 例如user1已登录,user2已更新名为ABC的东西并将其保留到数据库中。我正在寻找一些源代码和描述。我是新手,自己学习Web开发。我已经搜索了很多,但没有得到很好的答案。
我会写一个带有static
method
Logger::logUserAction($actionType, $actionParams)
的单例Logger
。 nethod 将在数据库表中插入一条新记录 [操作整数、参数文本、日期时间戳]。
对于基本的记录器,首先,您应该确定是需要数据库日志还是文件格式的日志。如果日志位于数据库中,则需要创建一个将接收日志的数据库表。
在这两种情况下,您都需要创建一个将生成日志的函数。在将此功能放在您的网站上之前,请单独测试此功能。
完成后,您应该在 Web 结构、登录、数据库更改(记录对象更改)等上调用此函数。
日志函数可以是从 PHP 文件中调用的static
函数,如果您使用的是 OO 架构,甚至可以是日志类。
还有更高级的日志功能,特别是如果您使用的是 zend.log 或 Laravel 日志记录等框架,但您没有提供有关 Web 应用程序的太多信息。
OBS:此方法适用于服务器端日志记录。要记录客户端操作(用户单击了某些内容),您需要对服务器进行 AJAX 调用才能调用日志函数。
您可以通过多种方式实现此目的。
对于登录/注销活动,您可以在数据库中创建一个名为"login_activities"的表。 您可以在其中存储有关某些登录/注销活动的数据。 您可能需要以下列:
user_id (int) - 登录或注销的用户的 ID
date_and_time(日期时间)- 用户登录或注销的日期和时间
user_ip (varchar) - 用户登录或注销的 IP
activity_name (varchar) - 这可以采用示例值"login"和"logout",并将指示用户是登录还是注销
前任。
ID | user_id | date_and_time | user_ip | activity_name
1 | 1 | 2017-17-03 12:00:00 |192.168.0.1 |登录
2 | 1 | 2017-17-03 12:15:00 |192.168.0.1 |注销
表中的第一行将让您知道 ID 为"1"的用户于 2017-17-03 于 12 点从 ip 192.168.0.1 登录。 第二行将指示 ID 为"1"的用户在 2017-17-03 12:15 从 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'");
至于更新,这更具体一点,我需要更多关于您的项目的信息来为您提供更多有用的信息,但我建议为此使用数据库触发器。
触发器允许您在某些事件发生时在数据库内执行一些 sql(选择、更新、插入、删除)。
我建议您阅读一些有关数据库触发器的文章,因为这个概念并不难掌握,并且对于想要在数据库中保留日志的情况非常有用!