从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]

Posted

技术标签:

【中文标题】从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]【英文标题】:$_SESSION variable empty when accessing from AJAX on different port [duplicate] 【发布时间】:2014-04-17 01:21:45 【问题描述】:

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

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

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

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

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

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

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

我将此添加到 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) . ");";

仍然需要整理,但它有效。感谢您的帮助

【问题讨论】:

看到这个答案:***.com/a/1795208/2777820 这个问题不是这些问题的重复。 CORS 不是这里的问题,他收到了一个空用户 ID 的响应。 正确的凯文,我已经用解决方法更新了原始帖子。它不是很整洁,但现在可以使用。Shane 看了两个问题后,我同意这不是重复的。 【参考方案1】:

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

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

【讨论】:

参考阅读:php.net/manual/en/session.idpassing.php

以上是关于从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何不让用户直接从AJAX使用的浏览器访问php文件?

同一服务器上的不同端口是不是被视为跨域? (阿贾克斯方面)

什么叫ajax跨域访问

前端跨域之Jsonp的原生请求和Jquery的ajax请求,简单易懂。

Ajax——跨域访问

如何解决ajax跨域请求?