我在服务器上有一个具有功能的php文件,并且我还具有Node Js API。我想将Node Js的值传递给php脚本,然后将函数输出返回给node js。
我按照Christian中here的建议,使用cookie解析器对此进行了尝试。但这不起作用
php脚本
<?php
$max = $_COOKIE["usrMob"]; // Taken from cookie
$min = 1111;
$number = mt_rand($min, $max); // Find random number
echo $number; // Send back to Node Js
?>
Node.Js
const express = require("express");
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser('Your Secret'));
router.get('/cookie', function (req,res)
{
// Set cookie
res.cookie('userMax', '46556') // options is optional
res.end();
console.log("Cookie is : " + res.cookie);
})
答案 0 :(得分:0)
我在服务器上有一个具有功能的php文件,并且我有Node Js API也。我想将Node Js值传递给php脚本,然后返回 函数输出到节点js。
我在这里使用了Christian建议的cookie解析器来尝试此操作。但这不起作用
简短答案
由于 CORS ,无法共享COOKIES,您的nodejs服务器必须位于PHP服务器的允许来源列表中。
好答案
COOKIES在将用户设置/令牌/密码或一些敏感数据存储在浏览器上时非常有用,这些数据允许用户的浏览体验表现出与大多数用户决定不同的行为。
因此,除非不同的服务器之间进行通信,否则无法在请求中发送它们,除非允许它们离开“授权来源”,否则将通过cookie大量泄漏数据,向 CORS打个招呼 strong>(除非您不拥有目标服务器)。
示例:
您在TargetServer( TS )上有一个脚本,该脚本在用户执行某些操作时在其中设置cookie。用户完成脚本操作后,您想将数据发送回YourServer( YS ),当AJAX触发时,将不会像通常在{{ 1}}。 在您使用了一系列工具之后,又出现了另一个问题,您对 YS 提出的每个请求都会生成一个新的ID /会话(我正在查看您的PHPSESSID),这意味着您不会例如,您不知道该用户是否已登录,并且您确定自己早已登录(是的-他已登录,但在另一个会话文件中...)。
如何解决此问题:
- 找到一种适当的机制来加密/解密脚本和php会知道的字符串。
- 从 TS 向 YS 发送请求时,添加自定义 YS 期望的标题。例如
localhost
,PHP将看到传入的标头,将解码VersionOf('hey-give-me-the-session-id'),并将触发一些特殊的REQUEST-CUSTOM-HEADER: encodedVersionOf('hey-give-me-the-session-id')
,并向您发送带有不同标头的响应{ {1}}。您的脚本现在将其保存在COOKIES中,因此您无需再次请求它。并在以后的请求中将其附加到标题中。- 如果PHP将传入的字符串识别为有效会话,则php可以使用
if
加载您知道其中包含数据的会话,请确保在RESPONSE-CUSTOM-HEADER: encodedVersionOf('here-is-the-session-id')
之前设置session_id($incoming_id)
< / li>- 我强烈建议将JWT用于此类事物或某些加密的stringify json,因此您可以拥有一个对象,例如{session_id:12idn3oind,userInfo:{name:'test'}}}。
- 当涉及CORS时,通过标头交换数据是下一件好事。
我曾经处理过这个示例,虽然不是很想做,但最终还是值得的。
您可以向php发送数据或从php接收数据,唯一的事情是应该使用标头,这样才不会影响php输出。 由于您同时拥有这两个服务器,因此可以执行以下操作:
最重要的是:
session_id
session_start
/ npm install -S express
。.htaccess
headers_module
PHP
mod_headers
Node.JS
别忘了更改这些行以指向您的php服务器:
Header add Access-Control-Allow-Headers "node-request, node-response"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Header add Access-Control-Expose-Headers "node-request, node-response"
Header add Access-Control-Allow-Origin "*"
index.js
<?php
$max = @$_COOKIE["usrMob"]; // Taken from cookie
$min = 1111;
$number = rand($min, $max); // Find random number
echo $number; // Send back to Node Js
if( isset($_SERVER['HTTP_NODE_REQUEST'])){
$req = json_decode($_SERVER['HTTP_NODE_REQUEST'], true);
$data = array();
// 'givemeanumber' is sent from Node.js server
if( isset($req['givemeanumber']) ){
$data = array(
'number' => $number
);
}
header('NODE-RESPONSE: '. json_encode(array("req" => $req, "res"=> $data)));
}
?>
middleware.js
getFromPHP('localhost', '9999', '/path-to-php-script', {givemeanumber: 1})