-1

我有一个我无法理解的问题。

该问题仅出现在 Opera 11.50 浏览器上。我只是简单地写入文件功能。 fopen, LOCK_EX, fputs, LOCK_UN, fclose.

当我正常打开页面时,一切正常。但是当我重新加载页面时,字符串会多次写入文件(2 次,有时 3 次)。我检查过,函数只触发一次,并且回显返回正确的字符串。

同样在刷新时,Opera 会忽略 php 会话变量和 cookie。当然,我在会话开始之前使用缓冲区。

对于任何其他浏览器,不会出现此问题。

我检查了 cookie 和浏览器设置。也重装了浏览器。在新下载并安装了 Opera 11.50 的第二台 PC 上也是同样的问题。

有任何想法吗?

ps:我阅读了这个相关主题,但我没有在那里找到我的问题的答案。

有一些代码:

if (!isset($_SESSION['foo']) && ($check4 === false) && !isset($_COOKIE['bar'])) {

     echo "test!";

     $fileHandler = fopen(MASTER_PATH . "/data/logs/loger.txt", "ab");
     flock($fileHandler, LOCK_EX);
     fputs($fileHandler, "What?!");
     flock($fileHandler, LOCK_UN);
     fclose($fileHandler);

     $_SESSION['foo'] = true;
     $check4 = true;
     setcookie("bar");
}

正常进入页面时一切正常。重新加载时回显“测试!” 没有运行,但在文件中出现两个条目“什么?!”。只有这个函数有输出到那个文件。

4

1 回答 1

0

经过一周的战斗和一天的等待,最终我找到了答案。

Opera 每次刷新都会创建一个新的不可见会话,这不会影响主会话,但会话相关功能无法访问正确的会话,并且仅在刷新时才会有新会话。session_save_path 中的文件数量随着每次重新加载而增加。是浏览器问题。

有关于此的信息:http: //www.blog.paranoidpenguin.net/2011/03/opera-11-the-php-session-bug/

于 2014-01-26T03:09:36.530 回答