从不同端口的AJAX访问时$ _SESSION变量为空

时间:2014-03-12 17:34:28

标签: javascript php jquery ajax session

我创建了一个具有PHP端的站点,它在端口80(index.php)上运行,当我登录时,它使用userid设置会话变量。

然后我单击一个链接,它将我带到端口8080,这是一个执行node.js进程(live.html)的JavaScript文件。

从这个node.js客户端文件(live.html)我从一个名为getUserSession.php的文件中请求userid,该文件从会话中回显userId。

当我运行AJAX请求(live.html)时,它返回会话用户ID为空但是如果我手动将URL插入Web浏览器,它会回显用户会话(http://localhost:8080/getUserSession.php)。

我已将数组转储到响应中,它告诉我$_SESSION变量为空。

我还试图返回一个纯文本字符串test - 这没有问题,所以从一个不同的端口访问会话变量似乎是一个问题,而不是实际的AJAX调用本身。 / p>

更新: 这就是我最终解决问题的方法。

我将其添加到index.html文件中:

$.getJSON("`http://localhost:80/getUserSession.php?callback=?`", { username: "lazy"}, function(json){
      username = json.message;
    });

并将以下内容添加到php文件中:

<?php
session_start();//start the session
$user2 = (string)$_SESSION['username'];
$callback = $_GET["callback"];
$user = $_GET["username"];

if($user == "lazy") {
  $response = array("message" => $user2);
} else {
  $response = array("message" => $user2);
}

echo $callback . "(". json_encode($response) . ");";

仍然需要整理但是有效。谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

当您从浏览器向php发出请求时,会创建一个链接到浏览器的会话。当您使用node.js向php发出请求时,会在php和该node.js请求之间创建一个新会话,因为node.js与Web浏览器不是同一个客户端。

一种解决方法是将会话令牌信息传递给node.js,以便node.js可以将php文件作为同一客户端请求,但是我不确定这是否是你可以做的事情用php 开箱即用。如果您使用默认设置进行会话管理,使用coldfusion就像传递cftoken和cfid一样简单。