为什么保存会话在数据库中是很好的保存?

我已经看到codeigniter具有将会话值保存在数据库中的工具。
它说在数据库中保存会话是很好的安全实践。

但我认为将会话信息保存在数据库中有助于提高性能。
它们仅保存会话的几个元素,例如:

CREATE TABLE IF NOT EXISTS  'ci_sessions' (
  session_id varchar(40) DEFAULT '0' NOT NULL,
  ip_address varchar(16) DEFAULT '0' NOT NULL,
  user_agent varchar(50) NOT NULL,
  last_activity int(10) unsigned DEFAULT 0 NOT NULL,
  user_data text NOT NULL,
  PRIMARY KEY (session_id)
);

但是,如果站点使用更多的会话变量,例如用户名,上次登录时间等,我可以将它们保存在数据库中并在程序中使用它们。

我是否必须将这些列添加到同一个表中?我认为将会话信息保存在数据库中只会减少Web服务器的内存使用量(RAM)。任何人都可以解释它在什么意义上提高了安全性。


答案 1

它不会以任何方式提高安全性。

在数据库中存储会话的最常见和最合理的模式是当您有多个前端服务器时,因此您需要为它们提供共享会话存储。

对于下投票者:文件系统中的文件的安全性并不低于数据库中的记录。


答案 2

这个想法是会话不能被劫持。

会话 ID 存储在 Cookie 中。如果黑客可以窃取该ID,他可以假装是其他人,因为会话是由...它是ID。

通过保存用户的会话 ID、IP 和代理服务器端(例如数据库),您可以将数据库中保存的数据与客户端进行比较。如果黑客窃取了某人的会话ID,黑客可能只是没有匹配的IP和/或用户代理,使用户不匹配,从而允许您显示或隐藏某些内容。

但是,您必须手动比较数据。


推荐