有时在其他访问者中未设置会话


Session Not Set Sometimes In Other Visitor

我使用会话来确定我们网站的访问者下载文件的次数。如果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有关。

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

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

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

但是,如果你不能自己复制,你肯定需要更多的数据来解决这个问题。