0

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

4

1 回答 1

0

解决方案 在尝试了一些参数选项后,问题解决了。

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

我改为 maxAge 而不是过期。

这些链接帮助了我。
如何保持 expressjs 中的会话不会过期
http://mrcoles.com/blog/cookies-max-age-vs-expires/

于 2016-02-10T00:11:29.237 回答