php - WordPress会话不断刷新不一致
问题描述
我正在尝试使用以下代码在我的 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 弹出窗口,该弹出窗口也记录同意。
一切正常,除非我将文本文件与谷歌分析和 Cookie 进行比较是的,我发现文本文件中的计数明显高于谷歌分析。例如,文本文件显示的总天数为 11764,而 Google Analytics 显示的总天数为 598。
经过进一步调查,我注意到在文本文件中记录同一网站访问者的次数比在 Google Analytics 中记录的次数少,这让我相信,当同一访问者浏览网站时,网站会话会不断刷新。
如果我清除浏览器历史记录或关闭浏览器,我总是认为会话会刷新,那么为什么会话会不断刷新同一用户。
我不想按 IP 地址记录会话,因为我想保持 IP 匿名以用于 GDPR 目的。
我的代码存储会话的方式有问题吗?如何防止会话为同一用户刷新?我只希望在访问者关闭浏览器后销毁会话。
解决方案
您必须session_start()
在使用 查询会话 ID 之前调用session_id()
,否则它将始终返回一个空字符串。
会话可能无法启动。检查 的返回值session_start()
。
如果会话成功启动,此函数返回 true,否则返回 false。
此外,实际上没有必要检查 的空性session_id()
,因为如果成功, session_start() 将启动一个新会话或恢复现有会话。所以足以检验$_SESSION['hasVisited']
.
推荐阅读
- python - 如何制作正弦模式平稳时间序列?
- java - 如何在 Java 中使用 apache.commons.imaging 保留 TIFF 图像的透明度
- php - php - 检查条件中的命名空间
- ms-access - 筛选日期以搜索 PLC 项目
- groovy - 如何使用 Groovy 更改单个测试套件中的两个端点?
- python - 需要帮助使用 BeautifulSoup/requests 解析漫画图像
- javascript - 如何合并具有不同颜色的网格并且只有一个绘制调用?
- microsoft-graph-api - Azure Graph API - 无法使用各种 $Filter 语句检索 SSPR 数据
- python - 有没有办法将自定义别名添加到 pipenv shell 中?
- excel - Vlookup表将工作表复制到其他工作簿vba