Session 管理用户的最佳方式是什么;她在做什么?
我怀疑如何在React中管理用户的会话,例如在MVC.NET中,您只需使用会话对象(例如,Session 管理用户的最佳方式是什么;她在做什么?,session,reactjs,Session,Reactjs,我怀疑如何在React中管理用户的会话,例如在MVC.NET中,您只需使用会话对象(例如,会话[“test”]=”;),但React显然无法做到这一点 我在读关于使用组件状态的书,我想这会将状态设置为主组件,并使用道具将此状态传递给其他组件。我还看到有人推荐使用浏览器的localStorage或cookies,但我不知道这是否是一个好主意或做法 在React中管理会话变量是否有比使用localStorage或cookies更好的方法?我会避免使用组件状态,因为这可能很难管理,并且容易出现难以解决
会话[“test”]=”;
),但React显然无法做到这一点
我在读关于使用组件状态的书,我想这会将状态设置为主组件,并使用道具将此状态传递给其他组件。我还看到有人推荐使用浏览器的localStorage
或cookies,但我不知道这是否是一个好主意或做法
在React中管理会话变量是否有比使用
localStorage
或cookies更好的方法?我会避免使用组件状态,因为这可能很难管理,并且容易出现难以解决的问题
您应该使用cookies
或localStorage
来持久化用户的会话数据。您还可以使用闭包作为cookie
或localStorage
数据的包装
下面是一个简单的UserProfile
闭包示例,该闭包将保存用户名
var UserProfile = (function() {
var full_name = "";
var getName = function() {
return full_name; // Or pull this from cookie/localStorage
};
var setName = function(name) {
full_name = name;
// Also set this in cookie/localStorage
};
return {
getName: getName,
setName: setName
}
})();
export default UserProfile;
当用户登录时,您可以使用用户名、电子邮件地址等填充此对象
import UserProfile from './UserProfile';
UserProfile.setName("Some Guy");
然后,您可以在需要时从应用程序中的任何组件获取此数据
import UserProfile from './UserProfile';
UserProfile.getName();
使用闭包将使数据保持在全局命名空间之外,并使其易于从应用程序中的任何位置访问 这不是在react中管理会话的最佳方法。您可以使用web令牌来加密您要保存的数据,您可以使用各种可用的服务,一种流行的服务是(JWT)使用web令牌,如果客户端没有任何操作,您可以在一段时间后注销,并且在创建令牌后,您可以将其存储在本地存储器中以便于访问
jwt.sign({user}, 'secretkey', { expiresIn: '30s' }, (err, token) => {
res.json({
token
});
此处的用户对象是要在会话中保留的用户数据
localStorage.setItem('session',JSON.stringify(token));
举几个例子,我们可以使用它,它具有良好的会话管理API,例如,initSessionService
,refreshFromLocalStorage
,checkAuth
和许多其他。它还提供了一些高级功能,如不可变JS
或者,我们可以利用它提供的选项,如
回调
和超时
有一个名为React client session
的React模块,它使存储客户端会话数据变得非常容易。吉特回购协议是
这是以与闭包方法类似的方式实现的,但是它也支持使用3个不同的持久性存储的持久性。默认存储是内存(不是持久存储)
import ReactSession from 'react-client-session';
ReactSession.setStoreType("localStorage");
。。。并从应用程序中的任意位置设置/获取键值对:
import ReactSession from 'react-client-session';
ReactSession.set("username", "Bob");
ReactSession.get("username"); // Returns "Bob"
这是一个安全的过程吗?如果您存储的用户数据已经在网站上可见(例如姓名、电子邮件、电话号码等),那么这是安全的。例如,我不会用它来存储信用卡号为了让我理解正确,这个方法不是会话的完整实现,对吗?它仍然需要以某种方式保持。正确。如果需要持久性,可以修改UserProfile闭包以将属性存储在localStorage中。定义某个类而不是使用Clojure语法不是一回事吗?优势是什么?在本地存储中存储令牌是不安全的;localStorage不是一个安全的存储,如果一个坏的参与者获取了该令牌,他们可以代表您行事。@Far\u为什么它不安全?那么,应该在哪里保存代币呢?或者你推荐什么方法?请停止推荐JWT参加会议。他们不是为那个而生的。阅读此文了解更多信息:@PauloMadroñero在本例中,正确使用cookies是更好的选择。使用cookie,您可以,例如,a)防止JS代码读/写会话cookie(认为第三方.JS行为不好),b)限制特定域的使用以防止劫持(SecureSite),c)仅限制https的使用以防止不良参与者嗅探,其他。会话在服务器端执行。React在客户端工作,因此唯一的选择是使用本地存储来存储临时信息。