【发布时间】:2021-03-25 22:05:02
【问题描述】:
我正在尝试使用以下代码在我的 wordpress 网站上创建访客计数器:
add_action( 'init', 'session_counter' );
function session_counter() {
$date = date('d/m/Y');
$session_data = get_option( 'session_counter');
$session_data['01/12/2020'] = 0;
$session_counter = 0;
$session_data_output = '';
$i = 0;
if (!session_id()) {
session_start();
if($_SESSION['hasVisited'] != '1'){
if(isset($session_data[$date])){
$session_counter = $session_data[$date];
}
$session_data[$date] = $session_counter + 1;
update_option( 'session_counter', $session_data);
foreach($session_data as $k => $v){
if($i > 0){
$session_data_output .= "\n";
}
$session_data_output .= $k." - ".$v;
$i++;
}
$session_counter_txt = fopen("counter.txt", "w");
fwrite($session_counter_txt, $session_data_output);
fclose($session_counter_txt);
}
$_SESSION['hasVisited'] = '1';
}
}
上面的代码将每天的访问者总数存储在数据库中,然后以可读格式存储在文本文件中。
设置访问者计数器的目的是查看有多少人在同意 GDPR 弹出窗口之前访问了该网站,因为只有在获得同意后才会启用 Google Analytics。该网站使用 CookieYes GDPR 弹出窗口,该弹出窗口也记录了同意。
一切正常,除非我将文本文件与 Google Analytics 和 Cookie 进行比较是的,我发现文本文件中的计数明显高于 Google Analytics 中的计数。例如,文本文件显示的总天数为 11764,而 Google Analytics(分析)显示的总天数为 598。
经过进一步调查,我注意到在文本文件中记录同一网站访问者的次数比在 Google Analytics(分析)中记录的次数少,这让我相信,当同一访问者浏览网站时,网站会话会不断刷新。
如果我清除浏览器历史记录或关闭浏览器,我总是认为会话会刷新,那么为什么同一用户的会话会不断刷新。
我不想按 IP 地址记录会话,因为我想保持 IP 匿名以用于 GDPR。
我的代码存储会话的方式有问题吗?如何防止会话为同一用户刷新?我只希望在访问者关闭浏览器后销毁会话。
【问题讨论】:
标签: php wordpress session session-cookies session-variables