我正在考虑以这种方式创建session
:
使用cryto.randomBytes
创建安全令牌,然后将其存储在Cookie中。
当节点收到新连接时从cookie中提取令牌,将其存储在全局变量GLOBAL.SESSION[token] = data
我坚持第2步:
如果节点崩溃会发生什么?我是否需要将SESSION存储在PHP
这样的文件中?
如果我这样做,为了打电话给SESSION,我也需要全球化token
。但是,它的名字会有点长。如果我通过分配session name
缩短GLOBAL.SESSION[token] = GLOBAL.SESSION
,则当节点收到另一个连接时,它将被覆盖。
我应该遵循这种方式吗?或者有任何进一步的想法吗?
答案 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
您可以轻松使用而不是重新发明轮子。