1

我正在 node.js 中寻找基于非 cookie 的会话管理,例如在 URL 中传递参数,例如&session_id=. 当请求带有 session_id 时,它将知道会话已过期。我看过connect图书馆,但看起来它只是基于 cookie 的。

4

4 回答 4

4

警告

session id作为 GET 参数传递被认为是不好的做法。为什么?这很危险,因为人们通常不关心session id,他们可能会在里面发布/共享带有会话 ID 的链接。

这也是一个问题,因为当用户单击您网站上的外部链接并转到另一个站点时,该新站点将能够session_id在引荐来源链接中看到该链接。

所以我认为这不是一个好主意。Cookie 更安全。

看看:会话劫持

于 2013-05-06T07:20:29.780 回答
0

您可以使用localstoragesessionStorage..

  • 几乎和饼干一样
  • 不是饼干
  • 比饼干好!

更多信息:https ://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

它非常 -非常- 易于使用......例如在 Js 中:

<script>
    // check if Storage is avaible
  if(typeof(Storage)!=="undefined") {
    // Save data to local storage (no exiparion date)
    localStorage.setItem("name_always", "bxx");
    // Save data to the current session (removes when the tab is closed)
    sessionStorage.setItem("name_now", "bxx");
  } else {
    // No Storage support...
  }
  // Access to stored data
  alert( "For only now, my name is: " + sessionStorage.getItem("name_now"));
  alert( "Every day, my name is: " + localStorage.getItem("name_always"));
</script>

标签:

于 2014-02-13T12:56:43.640 回答
0

您可以将会话与 node.js 中的存储一起使用。例如,您有快速应用程序并希望在您的 web 应用程序中使用类似会话的系统。您可以为此使用connect-mongo模块。这将让您将会话存储在 db 中。在你的 app.js

var express = require('express'),
    , mongoStore = require('connect-mongo')(express);

var app = express();

app.configure('all', function () {
    app.use(express.session({
        secret: "terces",
        cookie: { maxAge: 24 * 60 * 60 * 1000 },
        store: new mongoStore({
            url: your_db_url
        })
    }));
    app.use(function(req, res, next) {
        res.locals.session = req.session;
        next();
    });
});

使用上面的基本代码,您可以在 express 中使用会话,您可以直接在控制器和视图中使用它。在您的控制器中;

app.post('/blog/create/?', function(req, res, next) {
    if (!req.session.user) {
        next("You need to login in order to create blog!");
    }
});

在您看来,您可以使用session.user以生成配置文件菜单为例。

于 2014-02-13T13:07:25.173 回答
0

对于您收到的每个请求,您都会相应地获得所有客户端 cookie。您还可以使用“Set-Cookie”在响应 HTTP 标头中设置客户端 cookie。

使用 GET 参数是不安全的。任何用户都可能意外共享他们的会话 ID,但如果您想要 100% 的安全性,我会通过 cookie 共享会话 ID,并且我会使用 HTTPS 来防止窥探者窃取 cookie。

于 2013-05-08T04:34:04.823 回答