【问题标题】:How to create two different sessions for normal users and admin users using express-session?如何使用 express-session 为普通用户和管理员用户创建两个不同的会话?
【发布时间】:2019-09-18 21:34:45
【问题描述】:

在我的应用中,有两种类型的用户登录:普通用户和管理员用户。现在我对两种类型的用户都使用单个会话,并且我的应用程序表现异常。当两个或更多用户登录时,某个用户会意外退出。

我认为这个问题是由于单个会话而发生的,我试图分成两个不同的会话,

//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”开头,所以我按上述方式拆分会话。

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

【问题讨论】:

    标签: node.js session-cookies express-session


    【解决方案1】:

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

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

    格式应该是这样的:

    secret: YOUR_SECRET.usertype
    

    这样你就可以用点分割它并确定用户类型。这样,您将拥有一个带有用户类型的会话。

    【讨论】:

    • 是的,实际上我也在做同样的事情,但发生的事情是我在同一个窗口中以用户和管理员身份登录,当我从管理员注销时,它也会自动从普通用户注销我。不是因为同一个会话吗?如果不是,请您提一下我在注销期间需要做的事情吗?
    • 我认为您在注销时正在破坏会话,并且它会使用相同的密钥破坏会话。这是因为同一个会话,您应该一次只允许一个帐户登录。如果用户已登录,他/她应该注销以使用另一个帐户。这是最好的方法。我猜多次登录不是一个更好的选择。
    • 我在用户和管理员登录时分别设置了两种不同类型的密钥。注销时,我使用了 session.destroy()。是这个原因吗??
    • 是的,session.destroy 将销毁活动会话,因此当两个用户登录时,两个会话都将被销毁。
    • 一次只允许一个用户会话。如果必须以管理员身份登录,他/她应该注销用户帐户,反之亦然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多