Javascript 尝试将PHP会话变量传递到节点JS文件 问题是:

Javascript 尝试将PHP会话变量传递到节点JS文件 问题是:,javascript,php,json,ajax,html,Javascript,Php,Json,Ajax,Html,我目前正在制作一个游戏,需要访问数据库值才能使用ajax执行PHP文件。当我把链接放在浏览器中时,PHP文件可以工作,但当ajax调用时就不能工作。这是因为没有传递会话变量 我无法在我的节点游戏中将index.html更改为index.php,因为这会导致许多问题,因此我需要一种方法,将变量从数据库传递到javascript,而无需在javascript中使用直接的php代码 守则: 这是我的PHP代码: function __construct() { $this->dns= '

我目前正在制作一个游戏,需要访问数据库值才能使用ajax执行PHP文件。当我把链接放在浏览器中时,PHP文件可以工作,但当ajax调用时就不能工作。这是因为没有传递会话变量

我无法在我的节点游戏中将index.html更改为index.php,因为这会导致许多问题,因此我需要一种方法,将变量从数据库传递到javascript,而无需在javascript中使用直接的php代码


守则: 这是我的PHP代码:

function __construct() 
{ 

$this->dns= 'mysql:dbname=cashball_accounts;host=localhost;charset=utf8'; 
$this->username= 'myUser'; 
$this->password= 'myPass'; 
$this->db = new PDO($this->dns, $this->username, $this->password); 
} 


public function setCashAmount($cash_amount, $id) 
{ 
$sql = "UPDATE users SET cash_amount = :cash_amount - 0.05 WHERE id = :id"; 
$stmt = $this->db->prepare($sql); 
$stmt->bindParam(':cash_amount', $cash_amount, PDO::PARAM_STR); 
$stmt->bindParam(':id', $id, PDO::PARAM_STR); 
$result = $stmt->execute(); 
return $result; 
} 

} 
?>
mysql.php
function __construct() 
{ 

$this->dns= 'mysql:dbname=cashball_accounts;host=localhost;charset=utf8'; 
$this->username= 'myUser'; 
$this->password= 'myPass'; 
$this->db = new PDO($this->dns, $this->username, $this->password); 
} 


public function setCashAmount($cash_amount, $id) 
{ 
$sql = "UPDATE users SET cash_amount = :cash_amount - 0.05 WHERE id = :id"; 
$stmt = $this->db->prepare($sql); 
$stmt->bindParam(':cash_amount', $cash_amount, PDO::PARAM_STR); 
$stmt->bindParam(':id', $id, PDO::PARAM_STR); 
$result = $stmt->execute(); 
return $result; 
} 

} 
?>
subtract5.php

function __construct() 
{ 

$this->dns= 'mysql:dbname=cashball_accounts;host=localhost;charset=utf8'; 
$this->username= 'myUser'; 
$this->password= 'myPass'; 
$this->db = new PDO($this->dns, $this->username, $this->password); 
} 


public function setCashAmount($cash_amount, $id) 
{ 
$sql = "UPDATE users SET cash_amount = :cash_amount - 0.05 WHERE id = :id"; 
$stmt = $this->db->prepare($sql); 
$stmt->bindParam(':cash_amount', $cash_amount, PDO::PARAM_STR); 
$stmt->bindParam(':id', $id, PDO::PARAM_STR); 
$result = $stmt->execute(); 
return $result; 
} 

} 
?>
<?php
header('Access-Control-Allow-Origin: http://cashballz.net:3000', false);
include 'mysql.php'; 
session_start(); 

$cash_amount = $_SESSION['cash_amount'];
$userid = $_SESSION['id'];
$_SESSION['cash_amount'] -= 0.05;

$mysql = new Mysql(); 

$result = $mysql->setCashAmount($cash_amount,$userid); 
if($result) 
{ 
echo "5 cents have been subtracted!"; 
} 
else 
{ 
session_start(); 
session_unset(); 
session_destroy(); 
}
?>

结论是: 因此,当我把链接放在浏览器中时,PHP代码很好,执行得很好,但是当我从AJAX调用它时,文件被执行,但是会话变量没有定义

我该怎么办

(我可以将变量传递到JS文件中,并将它们作为AJAX下的数据,但如果没有index.php,我不知道如何传递会话变量

我的所有节点文件都位于不包含PHP的不同文件夹中,PHP文件与所有其他PHP文件都位于一个文件夹中


感谢您的帮助。

“会话变量未被传递。”这些变量是否在不同的域上(请参见CORS)?您是否查看了节点的身份验证模块?可能是令牌方法?例如JWT?它们在同一域上,但节点在该域上的服务器上运行(端口3000).我正考虑创建一个全局文件来运行整个脚本中的变量,但我不知道该使用什么,它是否会工作。我对这个问题感到有点困惑。是否要在PHP和Node之间共享cookie?也许可以阅读一些内容,缩小您的问题范围。这可能是一个好的阅读:是否可以只添加此line到我的config:AddHandler php5 script.php.html,这样我就可以在不更改扩展名的情况下将php添加到节点中的html文件中?是的,你可以用php解释html文件。如果你不能在应用程序中更改名称,听起来设计很糟糕。不过,我还是不太理解你的要求,我提醒你我可以操作网络浏览器中的DOM。你所设想的安全吗?永远不要相信那些该死的用户。