我正在关注Youtube上的一个教程,作者在那里非常模糊地解释了关于会话的主题(我们将使用cookie-session来存储数据,以便用户不再登录)
现在,在探究下一步以理解会话的工作原理时,我偶然发现了两种方法。
在快速会话网站上有一条说明
会话数据不会保存在cookie本身中,而只会保存会话ID。会话数据存储在服务器端。
Express将在未检测到会话cookie时创建一个新会话(并将其写入数据库)。事实证明,设置会话中间件并告诉Express静态目录在哪里的顺序有些细微的差别
我的问题是两者之间有什么区别?我们如何在Mongoose中存储会话信息?根据我模糊的理解,是否可以得出这样的结论:每当有来自客户的请求进入时,都会有一个来自我们后备数据库的请求来存储数据?如果是,那么它不存在性能问题吗?
此外,当Express-Session允许在客户端上存储cookie时,为什么存在cookie-sesssion npm模块?
答案 0 :(得分:0)
会话概述:
为避免针对用户的每个请求验证用户名和密码,将创建一个会话来标识用户。
会话数据始终存储在服务器端(使用会话存储),无论它存储在文件系统(不是首选)中,还是存储在Redis或Mongo Store等任何DB存储中,以使会话数据持久化。
会话ID发送到客户端并存储在Cookie中,以便每次向服务器发出请求时都可以使用它来标识用户。
存储在客户端中的此会话ID作为请求标头发送,用于验证用户是否已使用存储在服务器(会话存储中存在)中的会话数据进行了身份验证
何时存储会话并将新的会话ID发送给客户端?
每当用户向服务器发出请求时,服务器都会检查是否从客户端发送了任何会话ID(存储在Cookie中),如果在会话存储中找到了会话数据,则对用户进行身份验证,否则将生成新的会话数据并发送会话ID给客户。
何时删除会话数据?
当用户注销(需要调用正确的API)时,会话数据将被删除,因此存储在客户端Cookie中的较旧的会话ID无效。然后,在客户端发出的下一个请求中,服务器必须生成一个新的会话ID。
另一种需要重新生成会话ID的情况是会话时间到期(可以为Cookie设置到期时间)。