9

虽然不确定这是否是一个特定的反应问题:

我们正在使用带有服务器端渲染的 react/redux 堆栈进行开发和应用。用户登录后,我们会收到两个 cookie,一个用于身份,一个用于浏览器中的会话(具有到期日期)。问题是当用户刷新页面时,状态正在重置并且我们丢失了会话信息(我们基本上在状态中设置了一些变量来指示用户已登录)。

问题是如何管理这种情况并即使在页面刷新时也让用户保持登录状态。我正在考虑将服务器端渲染完全排除在图片之外,并在最初渲染页面时在客户端检查未过期的会话 id cookie,如果会话仍然存在,则在状态中设置一些变量,反之亦然- 反之亦然。

这看起来像是一种安全的方法吗?有更好的方法吗?

4

1 回答 1

5

我有一个类似的问题。如果可以的话,我个人认为检查 cookie 并在 UI 上重新注册会话没有任何问题。服务器仍由适当的 cookie 保护。

但是在我的情况下,我无法通过 JS 检查 cookie,因为它们被设置为http-only. 最后,我不得不寻求以下解决方案:


当用户第一次登录成功时,创建一个“sessionStorage”实例来指示有一个活动会话:

window.sessionStorage.setItem(sessionKey, stringifiedUserToken);

如果页面刷新,则检查此会话项并重新注册活动会话:

const activeSession = window.sessionStorage.getItem(sessionKey);
if (activeSession) {
  // fire register user session action
}

如果用户注销,则终止会话存储令牌。


所有服务器交互仍然需要将传递的 cookie,因此这纯粹是前端问题。

会话存储将在浏览器会话结束时清除,因此这种幼稚的方法可能不适用于“永久”会话。它确实有很好的浏览器支持:http: //caniuse.com/#search=sessionStorage

于 2016-05-31T11:52:16.063 回答