【问题标题】:Keep a session active on page refresh在页面刷新时保持会话处于活动状态
【发布时间】:2019-02-25 04:19:23
【问题描述】:

我刚刚接管了一个代码库,之前的开发人员没有使用 cookie 或 localstorage 来存储令牌。我想知道,如果我将令牌发送到客户端并将其存储在本地存储中,我可以在用户点击刷新时使用它来保持会话。我该如何实施?

【问题讨论】:

  • 会话应该在服务器上维护。
  • 如何在不将会话存储在数据库中的情况下做到这一点?
  • 您可以使用“内存中”会话。

标签: javascript node.js reactjs session token


【解决方案1】:

这是一个使用 LocalStorage 的示例。我假设您以某种方式在用户令牌和服务器端的会话之间建立了连接。

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

你可以在那里存储你想要的一切,但我不会存储任何敏感信息......

var ls = window.localStorage;

ls.setItem("token", "someTokenYo");

console.log(ls.getItem("token"));

由于沙盒,您不能在 Snippet 中使用 localStorage。但是有了手头的令牌,您应该可以轻松地做任何您想做的事情。由于缺乏细节,这是我唯一能提供的。

【讨论】:

  • 我认为您所假设的正是我所缺少的。如果我将令牌存储在前端,我如何从后端检查它,以便在页面刷新时保留用户的上下文?
  • 您需要对您的服务器做出正确的响应并获取数据,或者您将所有相关数据存储在localStorage中(不推荐)。这就是令牌的全部意义,或者我们称之为 sessionId。但这是您需要在您的——我假设——NodeJS 应用程序中找到的实现细节。如果你至少提供一些信息,我就不需要给你这个宽泛而模糊的答案了。
  • 感谢您的对话。我正在努力提供相关信息,因为我对授权非常不熟悉,我不确定我能告诉你什么是相关的。我有一个在后端使用节点的反应应用程序。我们正在使用npmjs.com/package/jsonwebtoken 来生成我们的网络令牌,并且它们不会被保存在任何地方的任何类型的本地存储中。再次感谢您的对话。请帮助我向您提供任何您可能认为与帮助我解决此问题相关的信息。
  • 我不想冒犯你,但你应该对最先进的网络技术有一个基本的了解。包括 OAuth(或您与 JWT 一起使用的任何协议)以及如何使用它来找出数据在前端的获取方式和位置(我假设针对后端的某种 http 调用是 REST 架构?)。请在您的问题中说明这些详细信息。
  • 如果您从事 WebDeveloping,使用浏览器开发工具并查看在主页上提出的请求可能会有所帮助,然后进一步了解。
【解决方案2】:
(function(){
    const body = document.getElementsByTagName('body')[0]
    body.onload = function() {
    /* 
       check if the session exists in cookie or localStorage
       if does, save that information into a variable for further coding, 
       something like:

       const isAuthenticated = true
    */  
    }
})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多