Javascript AJAX调用在PHP程序中显示空$ _SESSION

时间:2014-07-01 16:52:31

标签: php ajax session-variables

在onBlur事件期间,我使用AJAX在$ _SESSION [“first4”]号码中存储信用卡的前4位数字。我有一个完美无瑕的样品。然后我拿出那个好的代码并贴上我们从Clearcart购买的购物车(我们现在拥有代码)。问题是$ _SESSION变量在AJAX php接收器程序中始终为空。以下是该计划的全部内容:

$sessionName = "ClearCart20UserSession";
if (isset($_REQUEST[$sessionName])) session_id($_REQUEST[$sessionName]);
$started = session_start();
$_SESSION["first4"] = isset($_GET["first4"])?$_GET["first4"]:""; 

在第四行代码之后,以下变量为转储 :(即这些是输出值而不是赋值语句)

$started = 1
session_id=4f920c1fe5e2078d95f7700ece674659
$_REQUEST=Array
(
    [first4] => 5554
    [PHPSESSID] => 4f920c1fe5e2078d95f7700ece674659
    [ClearCart20UserSession] => 4f920c1fe5e2078d95f7700ece674659
)
$_SESSION=Array  
(
    [first4] => 5554
)
调用程序中的<_> $ _ SESSION字面上包含数千个变量。然而,在接收器中它是空的,除了我设置的变量。

注意:

1)这与调用程序中的session_id / PHPSESSID相同 - 我已将其转储。 (当我说调用程序时我指的是生成html表单的php程序;显然实际的'调用'程序是浏览器中的javascript)

2)http类型和域是相同的(都是https :)。我已将接收器ajax程序放在与调用者相同的目录中,以消除任何跨域问题。

3)会话保存路径为/ tmp,当我查看该文件夹时,存在sess_4f920c1fe5e2078d95f7700ece674659文件。 (虽然它似乎比我预期的数千个变量要小)。

4)当我在浏览器中返回页面然后转发以重新显示以前保存的会话变量(例如表单输入值)时,它们仍然存在,因此AJAX收件人不会清空$ _SESSION,因为空数组可能暗示。

5)购物车使用cookies,cookie值按预期正确反映在$ _REQUEST中。

6)我将session_write_close()添加到main / caller程序的末尾,以确保会话文件未打开。无所谓,因为调用者php终止并且在javascript事件触发AJAX之前没有任何反应。

7)FWIW session.upload_progress.enabled已启用。

8)奇怪的是,购物车使用AJAX用于自己的目的,我相信它工作得很好。无论如何,我没有看到这对我有什么影响 - 它完全不同的AJAX分别被不同的javascript和php调用和接收。

9)如上所述,这个几乎完全相同的代码适用于我开发的测试样本,我甚至模仿使用cookie。

10)我已经阅读过几十篇关于这个问题的帖子,但没有一个能解决我的问题。大多数似乎与不使用session_start或拥有正确的session_id有关。

我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

发现问题:购物车软件使用以下代码行更改了会话文件夹:

session_save_path( “tmpsession”);

因此,即使session_id是相同的,会话文件也存储在两个不同的文件夹位置(AJAX文件位于/ tmp,主调用程序使用www / tmpsession)。