第一次Ajax调用时,PHP Session为空

时间:2016-03-06 17:53:46

标签: javascript php jquery ajax session

我的页面内容很重,需要大约1.5分钟才能完全加载。我已经在滚动功能上添加了检索数据,当用户滚动检索数据时,我会调用ajax请求。

我已将数据检索行为包装到函数handleEventsLoad()并在加载时调用此函数,试图覆盖用户在页面完全加载到达结尾之前滚动的情况:

$(document).ready(function()
{
    $(window).scroll(function() 
    {
        handleEventsLoad();
    });     

    handleEventsLoad();

});

ajax请求被正确调用,但是,第一次调用此请求时,我无法读取$_SESSION中PHP级别的任何会话数据,因为他们知道会话是在页面加载时设置的,如果我在HTML中打印它可以看到它的价值。

第一次完全加载页面并刷新页面后,调用相同的请求,但这次我可以正常读取会话数据并按预期自动加载滚动功能(这里的区别在于所有数据已被缓存,页面加载需要7秒。

加载过程是否与在ajax调用中读取会话有关?

以下是ajax的示例:

function handleEventsLoad()
{

    if($('#sidebar').length > 0 
     && $(window).scrollTop() >=  $('#sidebar').offset().top + $('#sidebar').outerHeight() - window.innerHeight) 
    {
            $.ajax({
                url: "ajaxUrl.php",
                type: 'GET',
                dataType: 'json',
                data: {/* passing some data */},
                success:function(data)
                {

                    // some code here
                },

                error: function(xhr, status, error) 
                {
                  var err = eval("(" + xhr.responseText + ")");
                  console.log(err.Message);
                }
            });
    }
}

ajaxUrl.php

<?php
    session_start();
    print_r($_SESSION);
    return;
?>

更新

请在下面找到第一个和第二个ajax调用之间的HTTP请求之间的区别:

请求:

第一个电话:

  

连接:保持活力

第二次电话:

  

Cookie:_ga = GA1.2.1253088293.1457289524; _gat = 1; PHPSESSID = 79c38493322374f1bc19541f4c538b02

     

连接:保持活力

     

缓存控制:max-age = 0

响应:

第一个电话:

  

Set-Cookie:PHPSESSID = 79c38493322374f1bc19541f4c538b02;期满=星期一,   2016年3月7日18:38:41 GMT;路径= /;域= www.mydomain.com;安全;   HttpOnly PHPSESSID = 79c38493322374f1bc19541f4c538b02;期满=星期一,   2016年3月7日18:38:41 GMT;路径= /

第二次电话:

  

Set-Cookie:PHPSESSID = 79c38493322374f1bc19541f4c538b02;到期=周一,07-Mar-2016 18:40:06 GMT;路径= /

0 个答案:

没有答案