文件名: session_decode.js
//exports.session_decode = function() {
// var message = "Hello from the ohaithere module";
// return message;
//};
exports.session_decode = function (data) {
// * example: session_decode('firstName|s:5:"Kevin";midName|s:3:"van";surName|s:9:"Zonneveld"');
// * returns: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
var that = this,
utf8Overhead = function (chr) {
// http://phpjs.org/functions/unserialize:571#comment_95906
var code = chr.charCodeAt(0);
if (code < 0x0080) {
return 0;
}
if (code < 0x0800) {
return 1;
}
return 2;
},
error = function (type, msg, filename, line) {
throw new that.window[type](msg, filename, line);
},
read_until = function (data, offset, stopchr) {
var i = 2, buf = [], chr = data.slice(offset, offset + 1);
while (chr != stopchr) {
if ((i + offset) > data.length) {
error('Error', 'Invalid');
}
buf.push(chr);
chr = data.slice(offset + (i - 1), offset + i);
i += 1;
}
return [buf.length, buf.join('')];
},
read_chrs = function (data, offset, length) {
var i, chr, buf;
buf = [];
for (i = 0; i < length; i++) {
chr = data.slice(offset + (i - 1), offset + i);
buf.push(chr);
length -= utf8Overhead(chr);
}
return [buf.length, buf.join('')];
},
_unserialize = function (data, offset) {
var dtype, dataoffset, keyandchrs, keys,
readdata, readData, ccount, stringlength,
i, key, kprops, kchrs, vprops, vchrs, value,
chrs = 0,
typeconvert = function (x) {
return x;
};
if (!offset) {
offset = 0;
}
dtype = (data.slice(offset, offset + 1)).toLowerCase();
dataoffset = offset + 2;
switch (dtype) {
case 'i':
typeconvert = function (x) {
return parseInt(x, 10);
};
readData = read_until(data, dataoffset, ';');
chrs = readData[0];
readdata = readData[1];
dataoffset += chrs + 1;
break;
case 'b':
typeconvert = function (x) {
return parseInt(x, 10) !== 0;
};
readData = read_until(data, dataoffset, ';');
chrs = readData[0];
readdata = readData[1];
dataoffset += chrs + 1;
break;
case 'd':
typeconvert = function (x) {
return parseFloat(x);
};
readData = read_until(data, dataoffset, ';');
chrs = readData[0];
readdata = readData[1];
dataoffset += chrs + 1;
break;
case 'n':
readdata = null;
break;
case 's':
ccount = read_until(data, dataoffset, ':');
chrs = ccount[0];
stringlength = ccount[1];
dataoffset += chrs + 2;
readData = read_chrs(data, dataoffset + 1, parseInt(stringlength, 10));
chrs = readData[0];
readdata = readData[1];
dataoffset += chrs + 2;
if (chrs != parseInt(stringlength, 10) && chrs != readdata.length) {
error('SyntaxError', 'String length mismatch');
}
break;
case 'a':
readdata = {};
keyandchrs = read_until(data, dataoffset, ':');
chrs = keyandchrs[0];
keys = keyandchrs[1];
dataoffset += chrs + 2;
for (i = 0; i < parseInt(keys, 10); i++) {
kprops = _unserialize(data, dataoffset);
kchrs = kprops[1];
key = kprops[2];
dataoffset += kchrs;
vprops = _unserialize(data, dataoffset);
vchrs = vprops[1];
value = vprops[2];
dataoffset += vchrs;
readdata[key] = value;
}
dataoffset += 1;
break;
default:
error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
break;
}
return [dtype, dataoffset - offset, typeconvert(readdata)];
}
;
dataoffset = 0;
var res = {};
while (dataoffset < data.length)
{
keyandchrs = read_until(data, dataoffset, '|');
chrs = keyandchrs[0];
key = keyandchrs[1];
dataoffset += chrs + 1;
subdata = _unserialize((data + ''), dataoffset);
dataoffset += subdata[1];
res[key] = subdata[2];
}
return res
}
相关推荐
用于解决jenkins安装nodeJs插件后不能选择nodejs版本,将该文件上传到服务器,然后 docker cp ./hudson.plugins.nodejs.tools.NodeJSInstaller 容器ID:/var/jenkins_home/updates 然后重启Jenkins
石川(Blue)主讲NodeJS视频资料 |____nodeJS视频9课件.rar |____nodeJS视频9.rar |____nodeJS视频8课件.rar |____nodeJS视频8.rar |____nodeJS视频7课件.rar |____nodeJS视频7.rar |____nodeJS视频6课件.rar |____...
标题中的“node-v12.18.3-x64_nodejs_Node.js_”指的是Node.js的一个特定版本,即v12.18.3,适用于64位操作系统。Node.js是一个开放源代码、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码...
NodeJS 中文文档 (Node.js v12.14.0) 源网址:http://nodejs.cn/api/
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 编程,极大地推动了前后端同栈开发的可能性。Express 是 Node.js 平台上一个非常流行的 web 应用框架,它遵循 ...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Node.exe是Node.js的核心,它负责解析和执行JavaScript代码,提供了一个非阻塞I/O模型,使得Node.js非常适合处理大量的并发连接。 2. **node-v8.9.3-x64.msi**:这是一个Windows Installer文件,用于在Windows操作...
Jering.Javascript.NodeJS目录总览Jering.Javascript.NodeJS使您能够调用JavaScript中 ,从C#。 借助此功能,您可以使用C#项目中的javascript库和脚本。 您可以使用此库来替代最近淘汰的 。 替换了INodeService的...
Node js fics client. Written with JavaScript
# node -v v10.24.1 # npm -v 6.14.12
nodejs 解析html根据标签提取需要合并的js、css,并且更新html # 简介 > 站点页面上js、css外链过多会导致网页的加载速度过慢,通过合并页面的js、css成一个文件,减少http的开销。 读取config.json,解析html根据 ...
我们希望明确地说,这个模块的灵感来自node-wifi-control,但对某些功能进行了一些细微的修改,例如用于终端输出的各种特定于操作系统的解析器 更多详情、使用方法,请下载后阅读README.md文件
《Node.js实战》是一本深度探讨Node.js技术的书籍,由知名Node.js核心框架贡献者、社区活跃分子Mike Cantelon撰写。作为一名资深的培训师和演讲人,Cantelon以其丰富的经验与深入的理解,为读者提供了全面而实用的...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装