0

我正在使用会话来确定我们网站的访问者下载文件的次数。如果 的值downinc等于 3,那么我们强制他们在网站上注册。

例如,我有一个带有下载按钮的 pos_source_code.php 页面,然后在第一次请求时将会话downinc设置为 1。

if (!isset($_SESSION['downinc'])) $_SESSION['downinc'] = 1;

当访问者单击 pos_source_code.php 页面上的下载按钮时,他/她将被重定向到另一个名为 download.php 的页面。然后我将 的值更改downinc为递增 1。但在此之前,我检查了会话是否已设置,否则它应该下载文件:

if (!isset($_SESSION['downinc'])) {
    $error = "Invalid download. No Session.";
    // some code here
}else{
    $_SESSION['downinc'] = $_SESSION['downinc'] + 1;
    //some code here to download the file.
}

但有时,我的一些访问者给我发电子邮件说他们无法下载该文件。

我的代码有问题吗?顺便说一句,我使用的是 drupal 7。所以我不需要调用 session_start()。

更新:

只想补充一点,我正在使用 memcached。不知道这是否与memcached有关。

4

1 回答 1

1

因为这是您的用户正在报告的内容,并且您(可能)无法重现,所以您需要更多数据来进行故障排除。你的代码看起来不错。我怀疑这可能是用户错误(例如用户不耐烦并多次重新单击链接,以便在下载开始之前会话值增加太多),您可能需要识别并弄清楚如何编写代码。我建议创建一个日志文件,您可以使用它来关联用户投诉以解决问题。像这样的东西:

file_put_contents( "log.txt", date( "Y-m-d H:i:s" ) . " - " . $_SERVER['REMOTE_ADDR'] . " - " . $_SESSION['downinc'] . "\n", FILE_APPEND );

这会将时间戳、远程 IP 和当前会话值写入文本文件。当用户就这个问题与您联系时,您可以查看保存的值并查看,例如,会话值是否快速连续增加,或者它是否可能以某种方式直接变为 3 但从未有值 1 或 2,或者其他任何可能看起来很奇怪的东西。

但是,如果您无法自行复制它,您肯定需要更多数据来解决此问题。

于 2013-08-03T07:30:59.503 回答