繁体   English   中英

第二个php文件在第一个文件中找不到Session

[英]Second php file can't find Session started in first file

我无法让php $ _SESSION变量以我想要的方式工作。 我有两个文件。 第一个设置变量:

<?php
    session_start();
    header("Access-Control-Allow-Origin: *");
    $_SESSION['authenticated'] = "yes";
    echo json_encode('Authenticated successfully.');
?>

第二个试图检索它:

<?php
    session_start();
    header("Access-Control-Allow-Origin: *");
    print '<pre>';
    var_dump($_SESSION['authenticated']);
    print '</pre>';
?>

但是当第二个文件打印"Yes"并且在服务器日志中记录了一个新错误时,它总是打印出NULL

[Thu Sep 22 12:52:47.763114 2016] [:error] [pid 26644] [client <ip_here>] PHP Notice:  Undefined index: authenticated in <Second_file> on line 5, referer: <client_url_here>

这两个文件都是通过JavaScript的AJAX调用来访问的。

文件1的AJAX代码如下:

$.ajax({
        url: corrDomain + '/auth.php', //Path and name of file #1. It's correct and working.
        type: 'POST',
        data: {
            //This part is excluded in the above php code for simplification. It's guaranteed to work.
            username: username, 
            password: password,
            action: 'init'
        },
        dataType: 'json',
        success: function(data){
          //Check if data contains the right information, then call function for file #2.
        },
        error: function(){
          //Something went wrong
        }
    });

当该代码从php获得赞许时,用户被授权将为文件#2运行以下代码:

$.ajax({
    url: path + '/getProducts.php', //Also correct and working.
    type: 'POST',
    dataType: 'json',
    success: function(data){
        products.push(data);
        orderProductIds();

        //Update col 1 + 2;
        updateOrders('reload');

        //Set interval of updating col 1.
        setInterval(function(){
            updateOrders('update');
        }, 10000);
    },
    error: function(){          
        alert('Something went wrong.');
    }
});

更新:我添加了session_name(); 作为我所有php文件的第一行。 如果我在浏览器中打开每个文件,会话现在可以正常工作,但如果我通过AJAX访问它们则不会。 所以问题仍然存在,但也许这可以帮助你帮助我。


更新#2:在Chrome的网络检查器中,我可以看到两个文件都返回了会话Cookie ID,但它们具有不同的值。 查看截图。 在此输入图像描述

在此输入图像描述


更新#3:我研究并发现使用PhoneGap时无法进行php会话,即使我是通过jQuery AJAX请求php文件。 有人能证实吗?

确保你也启动会话session_start(); 在进行AJAX调用的页面上

编辑

一个不太优选但可能有用的方法是发送带有每个ajax请求的session_id以使用更多像令牌。

第一个PHP脚本:

session_start();
echo json_encode([
    'message' => 'Session started',
    'session_id' => session_id()
]);
exit();

将收到的ID存储在javascript-variable中:

var session_id;

$.ajax({
    ...
    success: function(data) {
        session_id = data.session_id;
    }
    ...
}

之后发送session_id以及每个AJAX请求:

var data = {session_id: session_id, ... };

$.ajax({
    type: "POST",
    url: "server.php",
    data: data,
    success: function(data) {

    }
});

您可以生成随机令牌而不是session_id,以便与每个请求一起发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM