在AJAX调用期间,PHP会话随机丢失/清空

时间:2012-01-16 12:09:39

标签: php ajax session null

我在我的网站上实施了评论部分。按下提交按钮后,将执行以下过程:ajax aproach。

  1. 评论保存在数据库中。
  2. 更新注释日志(仍使用数据库),该日志记录注释的详细信息。 (例如,#34; John Doe评论了某人的帖子。")
  3. 重新加载评论部分。现在可以看到新的评论。
  4. 完成。
  5. 问题发生在2号,请参阅下面的伪代码。

    session_start();
    //1. saves the comment in the database.
    
    //2. this gets the current user who submitted the comment
    //   hence I used the $_SESSION variable
    $log .= "$_SESSION['firstname'] $_SESSION['lastname'] "
                    . 'has commented on someone\'s wishlist.';
    
    updateLog($log); // commits the log in the database.
    

    有时,结果如下:

    John Doe评论过某人的愿望清单。

    其他时候$ _SESSION为空,会导致:

    评论了某人的愿望清单。

    我不知道问题出在哪里。但是,在Ajax调用中传递会话详细信息是一个好主意吗? 像这样(伪代码):

        $.ajax({
            url: 'includes/request.php',
            type: "POST",
            data: { 
                    firstname  : $_SESSION['firstname'],
                    lastname   : $_SESSION['lastname'],
                    //more details here.
            success: function(result) {
               // update the inner html of comment section
            }
        });
    

    我对上面的解决方案有疑问,因为它可能不是市场上最好的实践,因为$ _SESSION变量在php页面的任何地方都可用。说到这个场景中最好的做法是什么?

    最后,我的域名被网络管理员屏蔽(如下图所示):

    来自的

    :comments.com

    :coolnamebynetad.com

    掩蔽是罪魁祸首吗?我想不是因为$ _SESSION变量工作了一些时间,并且由于某些随机原因它没有。

1 个答案:

答案 0 :(得分:1)

这是IE(也许还有其他一些浏览器)的问题 - 而且是因为IE不通过AJAX发送cookie - 简单的解决方案是手动发送名为PHPSESSID的cookie,然后启动具有特定ID的会话