运行我的第三方js app,在IE上玩会话时看起来很奇怪。 从这里使用Chrome,FF和Safari没问题。
我的应用程序具有以下设计:
任何客户都可以使用我的第三方js代码。
所以,这个widget.js只是使用express来调用我的app节点。 这个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();
widget.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 ref。 https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
答案 0 :(得分:0)
<强>解决方案强> 在尝试了一些参数选项后,这就解决了。
cookie: { maxAge: 60*10000 },
secure: false,
httpOnly: true
我改为maxAge而不是expires。
这些链接对我有帮助。
$$PRUNE
How to keep session in expressjs to not expire