我创建了一个具有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) . ");";
仍然需要整理但是有效。谢谢你的帮助
答案 0 :(得分:2)
当您从浏览器向php发出请求时,会创建一个链接到浏览器的会话。当您使用node.js向php发出请求时,会在php和该node.js请求之间创建一个新会话,因为node.js与Web浏览器不是同一个客户端。
一种解决方法是将会话令牌信息传递给node.js,以便node.js可以将php文件作为同一客户端请求,但是我不确定这是否是你可以做的事情用php 开箱即用。如果您使用默认设置进行会话管理,使用coldfusion就像传递cftoken和cfid一样简单。