session - 我们如何在 Web 应用程序中进行身份验证?

标签 session authentication node.js session-cookies

抱歉,我写了很多内容来解释我的情况,如果您没有时间或没有心情阅读所有这些内容,请跳至问题。即使回答其中一个问题也对我的情况有所帮助,谢谢:D

我正在尝试在node.js中编写一个Web应用程序,但是由于我对Web太陌生,所以我不知道如何编写Web登录系统。我不想使用基本或摘要式 http 身份验证,我希望它像具有 http 表单的普通登录系统一样,并且不同的页面为不同类型的用户显示不同的内容。我搜索了一下,我了解了基础知识,但还不够。

这就是我得到的:

  1. 我们检查用户并从 POST 数据库中的数据
  2. 如果正确,我们将为客户端提供一个新 session ,并将其保存在数据库中。
  3. 客户端将 session 保存为 Cookie 并在每个页面请求中发送它。
  4. 服务器检查 session 并提供给用户的内容。

这是我不知道的部分:

  • 我们如何生成 session ?
  • 我们如何将其发送给客户?
  • 它是如何保存在 Cookie 中的?
  • 什么时候到期?
  • 如果过期会怎样?什么 我们应该做什么?
  • 还有什么我应该做的吗 知道吗?

如果可以的话,请给我一些 Node 中的示例。
预先感谢您:D

最佳答案

  • session 只是与对象/数组关联的唯一键( session ID),这样您就可以将数据连接到网站的用户。
  • 您将 session ID 作为 Cookie 发送到客户端,发送后,客户端会通过每个 HTTP 请求将其 session ID 发送到您的服务器。
  • 您发送 HTTP Set-Cookie header (Set-Cookie: sessionid=abcdefg38974)。
  • 您可以在需要时、在浏览器关闭时或一年后使其过期(这将使您保持登录状态一年,之后您必须再次登录)。
  • 当 Cookie 过期时,它会被丢弃,在服务器端,它看起来就像用户尚未设置 session ID,因此他必须重新登录。
  • 您应该了解诸如 session 劫持(窃取他人的 session ID)之类的事情。看看吧。

举个小例子,每次您请求时,它可能会创建两次访问次数,因为您的浏览器也会请求 /favicon.ico。请记住,此示例不太安全,因为可能会发生 session 劫持,这也会将所有 session 保留在内存中,并在服务器重新启动时忘记它们。将 session 保存到数据库是明智的做法。

var http = require('http');

var sessions = {};
http.createServer(function (req, res) {

    var ssid;
    var session;

    if (req.headers.cookie) {
        // Cookie already set, read it
        var parts = req.headers.cookie.split('=');
        ssid = parts[1];

        // Is the session id known to us?
        if (typeof(sessions[ssid]) != "undefined") {
            session = sessions[ssid];

            console.log('Loaded session with id ' + ssid);
        }
    }

    if (typeof(session) == "undefined") {
        // No cookie set, make one
        ssid = Math.random();
        session = {
            'visitNumber': 0
        }

        console.log('Created session with id ' + ssid);
    }

    session.visitNumber++;

    // Respond to the browser
    res.writeHead(200, {
        'Content-Type': 'text/plain',
        'Set-Cookie': 'ssid=' + ssid
    });

    res.end('Visit number: ' + session.visitNumber + '\n');

    // Save the changes we have made to the session data
    sessions[ssid] = session;

}).listen(8080);

关于session - 我们如何在 Web 应用程序中进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402592/

相关文章:

.net - 有人知道用于对SaaS用户进行计费和身份验证的服务吗?

php - 带有 php 后端的 AngularJS 应用程序上的 Facebook 身份验证

node.js - 如何在nodejs中返回响应?

php - 单击时从 session 数组中取消设置某些项目?

c# - 无法使用 ASP.NET session 状态提供程序连接到 Redis 服务器

php - 如何在android webview中保持网站 session

javascript - Sequelize.js 的关联未呈现在页面上

PHP ini_set session gc_maxlifetime 不工作

facebook - HWIOAuthBundle,如何使用 Facebook 访问 token 手动验证用户?

javascript - 为什么我的 promise 在循环中存在计时问题,我该如何解决?