【问题标题】:req.logout() or req.session.destroy() not working with IE 11+ browserreq.logout() 或 req.session.destroy() 不适用于 IE 11+ 浏览器
【发布时间】:2018-11-21 14:30:52
【问题描述】:

当我尝试使用 Chrome、Firefox 和 Safari req.logout() 在后端正常工作时,我在 app.js 中有以下代码,但是当我尝试使用 IE 浏览器注销时,它却无法正常工作。我使用以下代码设置会话和注销 API。

// set up our express application
app.use(cookieParser());

// required for passport
app.use(session(
    { 
        secret: 'SECRET',
        resave: true,
        saveUninitialized: true,
        maxAge: new Date(Date.now() + 1*60*60*1000),
        store: new MongoStore(
            {
                mongooseConnection : mongoose.connection
            }
        )        
    }
)); // session secret

app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions

注销 GET API

req.logout();
req.session.destroy(function(err){
   req.user = null;
   req.session = null;
   res.cookies('connect.sid', "", { expires: new Date(0)})
});

请建议我更好的方法来清除 IE 上的 cookie。

【问题讨论】:

  • 你用的是哪个版本的IE?
  • 我正在使用 IE 11+
  • 究竟是怎么回事?如果会话在后端被清除,则前端在再次登录之前应该无法访问任何 API。另外,也许检查这个答案:stackoverflow.com/a/50473675/3349511
  • @vesse 实际上它已解决,我错过了将cache: false 放入$.ajax 电话。 IE 将数据存储在缓存中。

标签: node.js session cookies passport.js session-cookies


【解决方案1】:

我找到了自己的方式,这是愚蠢的错误。

在IE浏览器中默认是缓存API,我的API在注销重新登录后第一次缓存,因为已经缓存了不是调用服务端的API,是从缓存中取出来的。

我找到了解决方案。我在$.ajax 调用中使用了cache: false 参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2018-12-14
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多