运行我的第三方 js 应用程序,在 IE 上玩 session 时看起来很奇怪。从这里使用 Chrome、FF 和 Safari 没有问题。
我的应用程序具有以下设计:
任何客户都可以使用我的第三方 js 代码。
所以,这个 widget.js 只是使用 express 调用我的应用程序节点。这个 widget.js 是一个 IIFE,在我的应用程序上获取请求并使用代码创建会话: app.js
var emptygif = require('emptygif');
var express = require('express');
var uuid = require('node-uuid');
var expressSession = require('express-session');
var app = express();
app.set('trust proxy', 1)
app.use(expressSession({
genid: function(req) {
return uuid.v4(); // use UUIDs for session IDs
},
secret: '1234567890QWERTY',
cookie: { expires: new Date(Date.now() + 900000) },
secure: false,
httpOnly: true
}));
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
next();
});
app.get('/widget.js', function(request, response){
response.sendfile('widget.js');
});
app.get('/ping', function(req, res) {
var msg_out = load(req);
console.log( msg_out );
emptygif.sendEmptyGif(req, res, {
'Content-Type': 'image/gif',
'Content-Length': emptygif.emptyGifBufferLength,
'Cache-Control': 'public, max-age=0' // or specify expiry to make sure it will call everytime
});
});
function load(req){
var msg = {
user_token: req.session.token_bility,
time_stamp: new Date(),
user_agent: req.headers['user-agent'],
language: req.headers["accept-language"],
referrer: req.headers['referer']
}
return msg;
}
app.listen();
小部件.js
(function(window, undefined) {
var _jq;
function drawWidget() {
console.log('drawing');
}
function loadSupportingFiles(_url,callback) {
var path = 'http://myserver/' + _url;
var oImg=document.createElement("img");
oImg.setAttribute('src', path);
var body = document.getElementsByTagName('body')[0];
body.appendChild(oImg);
callback();
};
function scriptLoadHandler() {
console.log('loading pixel');
}
loadSupportingFiles('ping', function() {
scriptLoadHandler();
});
})(window);
我已经通过谷歌搜索了这个问题,但仍然没有解决方案。我将与恳求分享有关如何解决此问题的任何提示和知识。
注意:
我忘了说一些关键信息。该令牌已为所有浏览器(IE、Chrome、FF 和 Safari)生成良好。但是服务器的每个提示只为 IE 生成不同的令牌。该行为表明 IE 使每个请求都过期。
IIFE 参考。 https://en.wikipedia.org/wiki/Immediately-invoked_function_expression