ios - 节点快速会话未在 iPhone IOS 中持续存在
问题描述
我有一个使用 Angular 和 Node (Nest JS) 的应用程序,在服务器端我使用的是 express-session。在我的中间件中,我将登录用户添加到会话中:
req.session.user = user;
当用户尝试使用 Iphone 登录时,他无法登录。调试问题后,我发现每个请求都有不同的 sessionId。我可以看到,在会话中初始化用户之后它工作正常,但是下一个请求是空的(没有用户对象)并且有一个新的 id。
此问题仅在 IOS 中出现。
我确实尝试更改 express-sessions 选项:maxAge、httpOnly、resave、saveUninitialized,但没有任何效果。
这些是我的明确定义:
app.then(instance => {
instance.use(compress({
filter: function ( req, res ) {
return (/json|text|javascript|css|font|svg/).test(res.getHeader('Content-Type'));
},
level: 9
}))
if ( _.has(config, 'log.format') ) {
instance.use(morgan(':method :url :status :res[content-length] - :response-time ms', Logger.getMorganOptions()));
}
instance.use(bodyParser.json());
instance.use(bodyParser.urlencoded({extended: true}));
instance.use(cookieParser(config.sessionSecret));
var MemoryStore = require('memorystore')(session);
instance.use(session({
store: new MemoryStore({
checkPeriod: 86400000 // prune expired entries every 24h
}),
saveUninitialized: true,
resave: true,
secret: config.sessionSecret,
cookie: {
maxAge: null,
httpOnly: false,
},
name: config.sessionKey,
}));
var corsOptions = {
origin: function ( origin, callback ) {
var isWhitelisted = originsWhitelist.indexOf(origin) !== -1;
callback(null, isWhitelisted);
},
credentials: true,
};
instance.use(cors(corsOptions));
instance.listen(3000, () =>
console.log('Application is listening on port 3000')
)
});
解决方案
推荐阅读
- python - 如何从 5 人阵容组合中创建 2 人、3 人和 4 人篮球阵容 ID?
- dns - 将子域的 NS 设置为具有相同 Apex 域的另一个托管区域
- django - 使用 Postgres、Gunicorn 和 Nginx 对 Django 进行 Dockerizing
- c++ - 如何将命令行参数转换为每个字符作为不同值的向量?
- iis - 设置 Intranet Web 服务器以发送电子邮件
- r - 如何编写一个从时间序列数据框中收集特定观察列表的函数
- python - 是否可以使用不确定的迭代器进行列表理解?
- visual-studio - 我在哪里将文件放在 nuget 包中以便恢复它们?
- android - Androidx BottomNavigationView 不会相应地播放过渡动画
- java - 如果一个数字在列表中出现多次,如何生成错误