JavaScript重定向后PHP会话丢失

JavaScript重定向后PHP会话丢失,javascript,php,jquery,ajax,session,Javascript,Php,Jquery,Ajax,Session,我有一个定制的网络商店,我使用PHP会话来存储客户选择的产品、数量和其他选项。选定的产品和选项通过jqueryajax发送到后端,由PHP接管,检查产品是否可用,是否存在,是否还有足够的剩余量,然后存储或更新会话中存储的数据。当客户尝试购买时,在某些情况下会话会丢失,我不知道为什么。我搜索答案/解决方案已经有相当一段时间了,我也尝试了一些解决方案,没有一个100%有效,会话仍在丢失。我找到了确切的位置,但无法解决它 一些代码: 重定向发生在jQuery的$.ajax调用中,调用window.lo

我有一个定制的网络商店,我使用PHP会话来存储客户选择的产品、数量和其他选项。选定的产品和选项通过jqueryajax发送到后端,由PHP接管,检查产品是否可用,是否存在,是否还有足够的剩余量,然后存储或更新会话中存储的数据。当客户尝试购买时,在某些情况下会话会丢失,我不知道为什么。我搜索答案/解决方案已经有相当一段时间了,我也尝试了一些解决方案,没有一个100%有效,会话仍在丢失。我找到了确切的位置,但无法解决它

一些代码:

重定向发生在jQuery的$.ajax调用中,调用window.location.href='/url/'url有效、存在并且与调用页面位于同一域中

这是我的jQuery代码:

$('body').on('submit','#some-form-name',function(e){
    e.preventDefault();
    var el=$(this);
    $.ajax({
        type:'post',
        dataType:'json',
        url:'/include/process-sl.php',
        data:el.serialize()+'&q=updateBasket',
        beforeSend:function(){
            ... some checks to verify if form should be submitted or an friendly error returned
        },
        success:function(json){
            if(json.success==true){
                ... show friendly success message before redirecting
                setTimeout(function(){
                    if(json.payment!=undefined){
                        if(json.payment=="paypal"){
                            window.location.href='https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='+json.token
                        }else{
                            window.location.href='/nakup-opravljen/'
                        }
                    }
                },1000);
            }else{
                ... shows friendly error message
            }
        },
        error:function(){
            ... ajax call failed, show error message
        }
    })
});
以下是主要PHP文件如何启动index.PHP、process-sl.PHP:

session_set_cookie_params(172800);
session_start();
session_save_path('/home/cheapand/tmp/sessions/');
ini_set("log_errors" , "1");
ini_set("error_log" , "logs/index.php.log");
ini_set("display_errors" , "0");
处理数据的PHP代码有点长,但会粘贴它,如果要求的话,基本上它只是在会话中更新数据。我不是第一次这么做,所以我假设没有错误,特别是因为它大部分时间都工作,并返回成功/错误、选择的付款类型和PayPal令牌(如果需要)

我所做的:

从此处开始的所有检查和步骤: 设置会话设置cookie参数172800; 我试着自己从各种设备上多次购买,当然,它总是有效的,不能重现错误 确认这会在各种设备上发生,因为它记录在错误日志中,所以它不是特定于设备的
你们有没有其他建议来检查或尝试什么?

检查正在发送的PHPSESSID cookie,确保每个请求都是相同的。如果PHPSESSID cookie更改,则意味着您将获得一个新的空会话。您可以在developer tools/Firebug/F12中看到HTTP请求头。。。这就是为什么购买总是成功的,所以必须有其他东西触发新会话或清除旧会话。