我正在使用会话来确定我们网站的访问者下载文件的次数。如果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有关。
答案 0 :(得分: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,或者其他任何看起来都很奇怪。
但如果您无法自行复制,那么您当然需要更多数据来解决此问题。