创建没有外部库的会话

时间:2014-08-03 06:53:34

标签: node.js session

我正在考虑以这种方式创建session

  • 使用cryto.randomBytes创建安全令牌,然后将其存储在Cookie中。

  • 当节点收到新连接时从cookie中提取令牌,将其存储在全局变量GLOBAL.SESSION[token] = data

我坚持第2步:

  • 如果节点崩溃会发生什么?我是否需要将SESSION存储在PHP这样的文件中?

  • 如果我这样做,为了打电话给SESSION,我也需要全球化token。但是,它的名字会有点长。如果我通过分配session name缩短GLOBAL.SESSION[token] = GLOBAL.SESSION,则当节点收到另一个连接时,它将被覆盖。

我应该遵循这种方式吗?或者有任何进一步的想法吗?

2 个答案:

答案 0 :(得分:0)

  

使用cryto.randomBytes创建一个安全令牌,然后将其存储在cookie

一次?您冒session fixation次攻击的风险。

  

在节点收到新连接时从cookie中提取令牌,将其存储在全局变量GLOBAL.SESSION[token] = data

保持全球化并不是很好的做法......但这取决于您和您的应用程序结构。

  

如果节点崩溃会发生什么?

当您的应用程序停止运行时,您释放到内存中的所有内容都将被释放。您负责管理数据,如果您希望它持久化,您必须通过写入磁盘,数据库等使其保持持久性。

  

我应该遵循这种方式吗?

没有。不要重新发明轮子。你将不可避免地在整个过程中犯下安全错误,而你只是为自己创造了更多的工作。

答案 1 :(得分:0)

是的,您需要将会话数据存储到持久数据库中,该数据库可能类似于平面文件,SQL数据库或noSQL数据库,如mongo,couchdb等。

如果你使用node.js和express,有一个非常好的库叫做connect-session:     https://github.com/expressjs/session

您可以轻松使用而不是重新发明轮子。