node.js中没有基于cookie的会话管理

时间:2013-05-06 06:01:19

标签: node.js session

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

4 个答案:

答案 0 :(得分:4)

警告

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

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

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

查看:Session Hijacking

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以使用localstoragesessionStorage ..

  • 几乎与cookie相同
  • 不是cookie
  • 比饼干更好!

更多信息: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>

标签:

答案 3 :(得分:0)

您可以在node.js中使用与商店的会话。例如,您有明确的应用程序,并希望在您的webapp中使用类似会话的系统。您可以使用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来生成个人资料菜单。