【问题标题】:Express session not working just with IEExpress 会话不仅仅适用于 IE
【发布时间】:2016-02-10 08:11:29
【问题描述】:

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

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 参考。 https://en.wikipedia.org/wiki/Immediately-invoked_function_expression

【问题讨论】:

  • 有时候我希望 IE 永远不存在 =P.
  • 可能与 cookie 有关,请检查您的 IE 配置以查看它是否正确接受来自您的应用程序的 cookie。
  • 服务器端代码并​​不重要(它可以在其他浏览器中使用......)为什么不向我们展示 widget.js 代码?为什么不准确解释什么在 IE 中不起作用?为什么它在 IE 中不起作用? 做一些调试。
  • 凯文,它已更新。
  • 不要在问题中发布答案。相反,向下滚动并创建一个答案,然后接受它。

标签: javascript node.js express express-session


【解决方案1】:

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

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

我改为 maxAge 而不是过期。

这些链接帮助了我。
How to keep session in expressjs to not expire
http://mrcoles.com/blog/cookies-max-age-vs-expires/

【讨论】:

  • 这应该与IE无关。是不是只有 IE 不工作/你能让它在 Chrome 没有 maxAge 的情况下正常工作吗?
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2022-06-17
  • 2015-05-19
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多