不需要 Cookie 横幅的计数器
多数分析工具需要一条同意横幅,因为多数分析工具会在访客设备上存东西:一个 cookie、一条本地存储、一个能活到明天的标识符。欧洲法律管得最直接的就是这个存储行为——也正是它让横幅必须在一切开始之前先出现。 这个计数器不在设备上存任何东西。没有 cookie,没有本地存储,什么都没有。你可以自己验证:浏览器脚本里找不到…
从 Stats4U 2 留下来的三个字段
这里的计数器主表有 166 436 行,还有若干看起来很要紧的字段。其中三个是 lastdomain、firstdomain 和 userdomain。它们里面装着数据: lastdomain在 15 525 行里非空 firstdomain在 15 457 行里非空 userdomain在 2 982 行里非空 计数器行数:…
我们不再收集屏幕尺寸
本服务以前会记录屏幕分辨率。浏览器脚本读取 window.screen,把它以 res=1920x1080 的形式一起发送,统计页面上也有一个对应的面板。 现在不记了。装这份数据的那张表今天有零行,面板显示的是它的空状态。脚本里进行读取的那一行,如今是一句说明当初写了什么的注释。 它为什么走了…
一个密码在低配硬件上要花多少
这里的统计页面可以加密码保护。给这个密码算哈希,是本服务里唯一一个应该慢的操作——正是它让一份被偷走的哈希变得难以攻破。问题只是:在这台硬件上,慢到什么程度。 在运行本站的那台机器上实测,PHP 8: PASSWORD_DEFAULT560 毫秒(解析为 cost 12) cost 12595 毫秒 cost 11277 毫秒 cost 10138 毫秒 cost 10138…
排行榜怎么运作,以及怎么退出
stats4u.net从一开始就对访问最多的计数器进行排名——一篇2012年的文章当时就已经在讨论如何改进它。当前版本位于/top,其底层运作方式和当年已经不同:按30天访客数排名的25个计数器、一份将本周与上周对比的独立"fastest…
网站目录里的备份就是源码泄漏
动一个大文件之前,很自然的一步是先复制一份。cp index.php index.php.改之前,然后开工。如果这个文件躺在 Web 服务器对外发布的目录里,你刚刚把自己的全部源代码变成了可以当纯文本下载的东西——数据库凭据、密钥,文件里碰巧有的一切。 Apache 让 index.php 走 PHP,是因为它以 .php 结尾。index.php.改之前 不以 .php…
新的隐私政策、条款和数据处理协议
截至2026年8月19日,stats4u.net的法律文件从原本的一份变成了三份:一份重新撰写的隐私政策、一份服务条款,以及——新增的——一份依据GDPR第28条订立的数据处理协议(DPA)。 为什么需要单独的DPA…
一个看起来像 Perl 的语言代码
2026年8月19日,我们在.htaccess里加了一条规则,用来拦截一类绝不应该被直接提供给浏览器的文件:编辑之后遗留在网站根目录里的源代码副本——比如index.php.bak、一个散落的config.py,或者任何带脚本扩展名、访客有可能以纯文本形式获取到源代码而不是让它运行起来的文件。…
每一次都把同一个文件压一遍
Apache 是即时压缩响应的。对一个每次都不一样的页面来说,这是唯一的办法。对一个一个月才改一次的样式表来说,这意味着服务器为每一位访客把同样的活儿重做一遍,一做几个星期,而且每次都把结果扔掉。这件事没有缓存。 2026 年 8 月 19 日在一条已建立的连接上实测,用的是本站自己的 style.css(124 kB)和 world.js(102 kB): 时间字节…
排除名单为什么不做哈希
正在建站的人,一天要打开自己的站二十次。在一个每月四十位访客的计数器上,统计的一半就是你。所以有一个设置:不要统计来自我自己地址的访问。 本服务的其他每一处,地址都会连同一个保密的盐和日期一起哈希,地址本身从不进入存储。唯独这一处,它按你输入的样子原样保存,明文。这是一个有意为之的决定,它值得被说出来,而不是留给人去发现。 最先试过的那个版本…
比字段还长的页面地址
2026 年 8 月 9 日,有二十张计数器图片没能画出来。不是画错了,也不是画得慢——访客在本该有计数器的位置什么也没拿到。 原因是一个超过 255 个字符的页面地址。现在它在写入时就被截断,计数器图片不再取决于告诉它的那个地址有多长。 这条链 记录一次访问落在哪个页面上的那个字段是 varchar(255)。地址来的时候比这更长。插入以 SQLSTATE 22001…
关于页面上撤下了什么,以及为什么
旧的关于页面上有一份功能清单。重建这个页面时,把清单逐行对着软件读了一遍,有四条已经对不上了。其中一条已经对不上好几年。 它们已经撤下。这里写明它们是什么,因为默默删掉不如给出解释 — 也因为那个页面上的清单现在是对着代码核对的,而不是对着它自己的上一版。 屏幕分辨率…