Express会话不能与IE一起工作

时间:2016-02-09 19:06:37

标签: javascript node.js express express-session

运行我的第三方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

1 个答案:

答案 0 :(得分:0)

<强>解决方案 在尝试了一些参数选项后,这就解决了。

  cookie: { maxAge: 60*10000 },
  secure: false,
  httpOnly: true

我改为maxAge而不是expires。

这些链接对我有帮助。
$$PRUNE
How to keep session in expressjs to not expire