抱歉,我写了很多内容来解释我的情况,如果您没有时间或没有心情阅读所有这些内容,请跳至问题。即使回答其中一个问题也对我的情况有所帮助,谢谢:D
我正在尝试在node.js中编写一个Web应用程序,但是由于我对Web太陌生,所以我不知道如何编写Web登录系统。我不想使用基本或摘要式 http 身份验证,我希望它像具有 http 表单的普通登录系统一样,并且不同的页面为不同类型的用户显示不同的内容。我搜索了一下,我了解了基础知识,但还不够。
这就是我得到的:
- 我们检查用户并从 POST 数据库中的数据
- 如果正确,我们将为客户端提供一个新 session ,并将其保存在数据库中。
- 客户端将 session 保存为 Cookie 并在每个页面请求中发送它。
- 服务器检查 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/