Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用express session为普通用户和管理员用户创建两个不同的会话?_Node.js_Session Cookies_Express Session - Fatal编程技术网

Node.js 如何使用express session为普通用户和管理员用户创建两个不同的会话?

Node.js 如何使用express session为普通用户和管理员用户创建两个不同的会话?,node.js,session-cookies,express-session,Node.js,Session Cookies,Express Session,在我的应用程序中,有两种类型的用户登录:普通用户和管理员用户。现在我对这两种类型的用户都使用单一会话,我的应用程序表现异常。当两个或多个用户登录时,某个用户在某个时间后意外注销 我认为这个问题是由于一次会议而产生的,我试图分成两次不同的会议 //manage session for normal user app.use('/', session({ key: USER_SESS_NAME, resave: false, saveUninitialized: false

在我的应用程序中,有两种类型的用户登录:普通用户和管理员用户。现在我对这两种类型的用户都使用单一会话,我的应用程序表现异常。当两个或多个用户登录时,某个用户在某个时间后意外注销

我认为这个问题是由于一次会议而产生的,我试图分成两次不同的会议

//manage session for normal user
app.use('/', session({
    key: USER_SESS_NAME, 
    resave: false,
    saveUninitialized: false,
    secret: SESSION_SECRET,
    cookie: {
        expires: 600000
    }
}));


//manage session for admin
app.use('/admin', session({
    key: ADMIN_SESS_NAME, 
    resave: false,
    saveUninitialized: false,
    secret: SESSION_SECRET,
    cookie: {
        expires: 600000
    }
}));


另外,对于普通用户,所有路由都以“/”开头,对于admin,它们以“/admin”开头,所以我如上所述拆分会话


我不知道这是否是创建两个不同会话的正确方法。此外,admin会话也没有按预期工作。当我以普通用户身份注销时,我也会从管理员处注销。处理这些会话的最佳方式是什么?注销时我们需要做什么?

对所有用户类型使用单个会话。最好的方法是在会话中使用帐户类型来分隔用户

每当用户注册时,设置普通用户和管理员用户的值。在会话机密中包括帐户类型

格式应如下所示:

secret: YOUR_SECRET.usertype

这样,您就可以将其与圆点分开,并确定用户类型。通过这种方式,您将拥有一个包含用户类型的会话。

对所有用户类型使用一个会话。最好的方法是在会话中使用帐户类型来分隔用户

每当用户注册时,设置普通用户和管理员用户的值。在会话机密中包括帐户类型

格式应如下所示:

secret: YOUR_SECRET.usertype

这样,您就可以将其与圆点分开,并确定用户类型。这样,您将有一个单独的会话,其中包含用户类型。

是的,实际上我也在做同样的事情,但发生的事情是,我在同一窗口以用户和管理员的身份登录,当我从管理员处注销时,它也会自动从普通用户处注销我。不是因为同一个环节吗?如果没有,请你提到我在注销期间需要做的事情吗?我认为你在注销时正在破坏会话,它使用相同的密钥破坏会话。这是因为同一个会话,您一次只能允许一个帐户登录。如果用户已登录,则应注销以使用其他帐户。这是最好的办法。我想多次登录并不是一个更好的选择。当用户和管理员分别登录时,我设置了两种不同类型的密钥。注销时,我使用了session.destroy()。这是原因吗?是的,session.destroy将销毁活动会话,因此当两个用户登录时,两个会话都将被销毁。一次只允许一个用户会话。如果一个人必须以管理员身份登录,他/她应该注销用户帐户,反之亦然。是的,事实上我也这么做了,但事情发生了,因为我在同一窗口以用户和管理员身份登录,当我从管理员处注销时,它也会自动从普通用户处注销我。不是因为同一个环节吗?如果没有,请你提到我在注销期间需要做的事情吗?我认为你在注销时正在破坏会话,它使用相同的密钥破坏会话。这是因为同一个会话,您一次只能允许一个帐户登录。如果用户已登录,则应注销以使用其他帐户。这是最好的办法。我想多次登录并不是一个更好的选择。当用户和管理员分别登录时,我设置了两种不同类型的密钥。注销时,我使用了session.destroy()。这是原因吗?是的,session.destroy将销毁活动会话,因此当两个用户登录时,两个会话都将被销毁。一次只允许一个用户会话。如果必须以管理员身份登录,则应注销用户帐户,反之亦然。