网站访客记录优化:安全、高效、统计
这段代码中存在以下问题:
- 文件写入和数据库插入操作没有进行错误处理,需要添加相应的错误处理代码。
- 访客信息没有进行过滤,容易受到恶意攻击或注入。
- 访客信息没有加密,存在安全隐患。
- 没有统计访问量。
优化后的代码如下:
//获取访客的IP地址
$ip = $_SERVER['REMOTE_ADDR'];
//获取访客的浏览器信息
$browser = $_SERVER['HTTP_USER_AGENT'];
//获取访问时间
$time = date('Y-m-d H:i:s', time());
//获取访问页面的URL
$url = $_SERVER['REQUEST_URI'];
//过滤访问记录
if(strpos($url, 'script') !== false || strpos($browser, 'bot') !== false){
//恶意攻击或注入,不记录
} else {
//加密访客信息
$ip = md5($ip);
$browser = md5($browser);
//将访客信息拼接成字符串
$record = $ip . '\t' . $time . '\t' . $browser . '\t' . $url . '\r\n';
//将访客记录写入文件
$file = fopen('record.txt', 'a+');
if($file){
if(fwrite($file, $record)){
echo '记录成功';
} else{
echo '记录失败';
}
fclose($file);
} else {
echo '文件打开失败';
}
//将访客记录写入数据库
$servername = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'dbname';
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error){
die('数据库连接失败:' . $conn->connect_error);
}
$sql = 'INSERT INTO visitor_record (ip_address, browser_info, visit_time, visit_url)
VALUES (' . $ip . ', ' . $browser . ', ' . $time . ', ' . $url . ')';
if($conn->query($sql) === TRUE){
echo '记录成功';
} else{
echo '记录失败:' . $conn->error;
}
$conn->close();
}
//统计访问量
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error){
die('数据库连接失败:' . $conn->connect_error);
}
$sql = 'SELECT COUNT(*) FROM visitor_record';
$result = $conn->query($sql);
if($result){
$row = $result->fetch_row();
echo '访问量:' . $row[0];
} else{
echo '查询失败:' . $conn->error;
}
$conn->close();
这段代码中,我们对以下几个方面进行了优化:
- 错误处理: 添加了错误处理代码,确保文件写入和数据库插入操作成功完成。
- 恶意访问过滤: 使用
strpos函数过滤了含有 'script' 和 'bot' 的访问记录,避免恶意攻击或注入。 - 加密访客信息: 使用
md5函数对访客的 IP 地址和浏览器信息进行加密,保护用户隐私。 - 统计访问量: 使用 SQL 语句查询数据库,统计网站的总访问量。
经过优化后的代码更加安全、高效,同时还能方便地统计网站的访问量,为网站运营提供数据支持。
原文地址: https://www.cveoy.top/t/topic/l6b8 著作权归作者所有。请勿转载和采集!