Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Javascript解析PHP会话_Php_Javascript_Session_Node.js - Fatal编程技术网

用Javascript解析PHP会话

用Javascript解析PHP会话,php,javascript,session,node.js,Php,Javascript,Session,Node.js,我最近开始使用node.js扩展我的站点,并意识到我需要一个用于PHP会话的会话处理程序。现在一切都很酷,node.js读取php会话,并可以用php会话传播自己的会话。我正在使用数据库会话,因此会话数据将保存到数据库中的一个字段中 然而,我发现了一个小问题。我正在尝试将会话数据读入node.js,它实际上是一个非常奇怪的字符串。我已经能够将每个会话变量的结构降到: 'field_name'|'type':'length':'value'; 现在,在某些字符串上,值字段可能会丢失,而在其他字符

我最近开始使用node.js扩展我的站点,并意识到我需要一个用于PHP会话的会话处理程序。现在一切都很酷,node.js读取php会话,并可以用php会话传播自己的会话。我正在使用数据库会话,因此会话数据将保存到数据库中的一个字段中

然而,我发现了一个小问题。我正在尝试将会话数据读入node.js,它实际上是一个非常奇怪的字符串。我已经能够将每个会话变量的结构降到:

'field_name'|'type':'length':'value';
现在,在某些字符串上,值字段可能会丢失,而在其他字符串上,长度可能会丢失(当变量为Null时)。类型也可以超过b、s、i;它也可以是N(NULL)

我原本想为JS设计一个巨大的翻译器,但这似乎是一种非常错误的方式

这里有人曾经尝试过在JS中提取php会话变量吗?有什么脚本可以帮助您?也许我可以在PHP端使用一种格式化方法,使我在node.js中的生活更轻松

编辑:架构如下所示:

{ _id: { id: 'L:\u00c1\u009d\u008e\u00ad\u000e}<\u0002\u0000\u0000' }
, session_id: 'a2clfnjhopv1srs5k5elgbfjv5'
, user_id: 0
, session_data:     'logged|b:0;uid|i:0;server_key|N;AUTH_TIER2|b:0;email|s:0:"";cheese|s:6:"cheese";'
, active: 1
, expires: 1278920567
}

{u id:{id:'L:\u00c1\u009d\u008e\u00ad\u000e}我比较确定PHP使用序列化和非序列化函数来处理会话数据


在PHP.JS中有一个unserialize的JavaScript实现,您可以在这里找到它:

只是用我发现的方式回答:强制PHP使用JSON:

使用下面的类,使用session\u set\u save\u处理程序将数据存储为JSON,让PHP仍然使用自己的系统。 在您使用的每个脚本会话的开头使用此函数链接此类:

PS:在这里,类使用memcache存储JSON结果对象,在Node.JS上,使用memcache对象,并按如下方式检索:

  • 从cookies中获取PHPSESSID
  • 使用该字符串从memcached中带出一个键,其中id是键,session只是字符串(参见下面的类)
现在,memcache中应该只有JSON,因此它将成为一个使用Node.JS的简单游戏

PS:当然你可以使用/改进它,你也可以使用它,不仅仅是memcache(例如db)


以下是基于phpjs的非序列化功能的会话解码功能:


我也遇到了同样的问题。我需要将
php
node.js
集成。我曾经这样做过。使用非常简单

var PHPUnserialize = require('php-unserialize');
console.log(PHPUnserialize.unserializeSession(yourData));
例如,如果你

var yourData = 'A|s:1:"B";userID|s:24:"53d620475e746b37648b4567";';
您将得到以下结果:

{
  A: 'B',
  userID: '53d620475e746b37648b4567'
}

我以前没有使用过node.js。在将未序列化的会话数据传递到node.js之前,是否可以先从PHP中删除这些数据?您是否可以显示一个示例,而不是模式?缺少某些内容时的外观如何?我添加了模式,但正如我所说,粘贴时出现了某种错误,stackoverflow无法将数据格式化为代码:(.galam,正如我在编辑中所述,我确实尝试了JSON,但它似乎破坏了字符串,使得无法检索会话数据:(.不过,如果我创建一个节点字段并将json字符串中的会话数据复制到该字段…并为该字段创建一个dejsonifier…hmmmm可以修复代码。为了将来参考,您需要将缩进代码与非缩进文本至少在空行上分开,然后才能正确格式化。这就是其中之一性感脚本Ima试一试。我看到它们也被序列化了,所以我会试一试。我需要php.js来使用这些脚本还是只需要它们声明的依赖关系?我自己没有使用过php.js,但我认为你可以选择你想要的特定函数和它们的dep,如果需要的话any@Jani我不确定这是通过序列化/非序列化处理的,而是with session_encode/session_DECODE您可能是对的Gordon。看起来还没有JS实现-@Sammaye您最好的选择可能是看看您是否可以使用unserialize使其正常工作,因为格式非常相似,但不完全是1:1,如果遇到问题,请修改函数以使其更像会话_解码(比从头开始编码要省力)是的,如果你像这样添加“fieldname”|“serialisedarray”,它可以1到1与JS一起工作。在我说它可以工作之前,需要做更多的测试,我需要将对象存储在数组中,这样它们就可以被忽略,但不会被node.JS删除,但它似乎可以工作:D
{
  A: 'B',
  userID: '53d620475e746b37648b4567'
}