我们如何在Web应用程序中进行身份validation?

对不起,我写了很多来解释我的情况,如果你没有时间或没有心情去阅读所有这些只是跳到问题。 即使回答其中的一个有助于我的情况,谢谢:D

我正在尝试在node.js中编写一个Web应用程序,但是由于我对于Web太新,我不知道如何编写Weblogin系统。 我不想使用基本或摘要http身份validation,我希望它像正常的login系统与http表单和不同的页面显示不同types的用户不同的内容。 我search了一下,我知道基础知识,但是还不够。

这是我得到的:

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

这是我不知道的部分:

  • 我们如何生成一个会话?
  • 我们如何将其发送给客户?
  • 它如何保存在cookie中?
  • 什么时候应该过期?
  • 如果过期会发生什么? 我们应该做什么?
  • 还有什么我应该知道的?

如果你可以请,给我一些节点的例子。
预先感谢您:D

  • 会话只是与对象/数组关联的唯一键(会话ID),这样您就可以将数据连接到网站的用户。
  • 您将会话ID作为cookie发送给客户端,一旦发送,客户端就会使用每个HTTP请求将其会话ID发送到您的服务器。
  • 您发送HTTP Set-Cookie标头( Set-Cookie: sessionid=abcdefg38974 )。
  • 你可以在浏览器closures或者一年之后(这会让你login一年,之后你将不得不重新login)过期。
  • 当一个cookie到期时,它会被丢弃,在服务器端,它看起来像用户没有设置会话ID,所以他必须再次login。
  • 你应该知道会话劫持(窃取别人的会话ID)。 看看它。

小例子,它可能会增加访问数量每次你请求两次,因为你的浏览器也要求/favicon.ico 。 请记住,这个例子并不是非常安全的,因为会话劫持是可能的,这也将所有会话保留在内存中,并在服务器重新启动时将其忘记。 将会话保存到数据库是明智的。

 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);