【问题标题】:Store session in client's browser using raw node.js and cookie without express使用原始 node.js 和 cookie 将会话存储在客户端的浏览器中,无需 express
【发布时间】:2017-08-24 01:18:43
【问题描述】:

我正在尝试使用未使用 express 的原始 node.js 存储客户端会话。

当用户登录时,我有用户名和密码。现在,如何使用 cookie 在客户端浏览器中存储会话。以及如何在用户刷新选项卡或转到另一个链接时识别用户。我不想使用client-sessions 模块,因为我想了解这种方法。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js session cookies client


    【解决方案1】:

    首先,我建议你看 everything about authentication in NodeJS它很好地解释了cookie。

    您必须为浏览器提供一些数据以供以后使用,即cookies。浏览器使用此数据向服务器显示它在之前处理了哪些类型的身份验证,以便服务器和用户继续进行而无需重复。 p>

    在node.js中,使用client-sessions模块,可以通过调用设置cookie

    app.post('/login', function(req,res){
     User.findOne({password: req.body.userPassword}, function(err, user){
    
     if(user){
        req.session.user = user; //here you are setting the cookie for the client,
      }
    })
    })
    

    您还可以通过添加属性来指定要设置的 cookie 类型

     req.session.userEmail = user.email;
    

    现在让我们检查一下服务器如何使用身份验证

    app.get('/someUrl', function(req,res){
    
      if(req.session.user){
       console.log("user exists!");
      }
    
    })
    

    您可以使用req 对象的session 属性=> req.session

    来检查客户端发送给您的内容

    要将它与你需要做的数据库绑定,

      if(req.session.user){
         User.findOne({email: req.session.user.email}, func...)
      }
    

    因此,基本上,对于客户端发送的每个请求,服务器都会使用此过程来识别 cookie 并使 Web 应用程序对用户友好且不重复。

    这就像在学校给每个学生一个ID以进行身份​​验证。

    安全

    为了安全,我们在app.use()函数中添加secret属性时,节点模块cookie-sessions会自动加密数据。请看using secret in client-sessions module

    【讨论】:

    • 简而言之,我必须将用户名作为 cookie 存储在用户浏览器中,当他们发出另一个请求时,我将从该 cookie 中获取有关他们的数据,对吧?
    • 是的,不仅是用户名,您还想添加 password cookie 以确保安全 @ImtiazChowdhury
    • 但这不会导致安全问题吗?我应该散列或加密存储在 cookie 中的那些数据,因为 cookie 可以手动创建。
    • 请查看npmjs.com/package/client-sessions。当你在app.use()函数中使用secret属性时,它会自动加密数据。
    • 感谢德尔森先生的回答。我希望它能解决我的问题。
    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2018-11-15
    • 2021-02-09
    • 2019-02-20
    相关资源
    最近更新 更多