【发布时间】:2010-01-13 01:14:39
【问题描述】:
我最终继承了一个似乎最初旨在为注册用户提供访问权限的网站,然后决定除了特定的受限功能外,它想要公共访问权限。访问控制是不错的,但是,让我难以置信的是为什么有人会为每个唯一的访问者添加一个条目到他们的数据库中。
身份验证代码检查 cookie 和会话是否存在,如果不存在,则创建受限用户帐户并将 cookie 设置为:
$session = md5(time() . "sitename" . $_SERVER['REMOTE_ADDR']);
setcookie("sitename",$session, time()+ 14 * 24 * 3600, "/",".sitename.com");
mysql_query("INSERT user(session,permissions) VALUES ($session, $permissions)");
$this->ActiveUser = mysql_insert_id();
服务器上有一个设置为每晚运行的 cron 作业,它清理这些会话并将 auto_increment 值重置为最后注册的用户 id + 1。虽然清理脚本很好,但似乎忽略了明显的设计缺陷大量流量(唯一用户)可以使用户 id 的 INT 值达到其 mysql 最大值:2147483647。将用户 id 更新为大 int 会有所帮助,但只能(理论上)这么久。此外,如果说最后一个注册用户和当天第一个新注册用户 id 之间有 50 个访问者,那么两者之间的 auto_increment 值将永远不会被重用。
该网站为访问者和会员等提供了良好的报告指标,提供有关用户查看的商品、商品是否最终进入购物车以及他们是否通过注册帐户购买了该商品的指标。
我认为可以使用 SESSION 变量为访问者和购物车重新设计身份验证功能,而无需接触数据库并创建未使用的 auto_increment 值。不利的一面是他们会失去自定义报告。
显然是一种权衡,但我想我会把它贴在这里看看有什么想法。谢谢!
【问题讨论】: