kir*_*ppa 46 php security performance session codeigniter
我已经看到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)
);
Run Code Online (Sandbox Code Playgroud)
但是如果一个站点使用更多的会话变量,如用户名,上次登录时间等,我可以将它们保存在数据库中并在程序中使用它们.
我是否必须将这些列添加到同一个表中?我认为在数据库中保存会话信息只会有助于减少Web服务器的内存使用量(RAM).任何人都能解释它在何种意义上提高了安全性.
zer*_*kms 90
它不会以任何方式提高安全性.
在数据库中存储会话的最常见和最合理的模式是当您有多个前端服务器时,因此您需要一个共享会话存储.
对于downvoters:文件系统中的文件不比数据库中的记录安全.
Tim*_* S. 17
这个想法是会议不能被劫持.
会话ID存储在cookie中.如果黑客可以窃取该ID,他可以假装成其他人,因为会话由...识别.
通过保存用户的会话ID,IP和代理服务器端(例如,您的数据库),您可以将数据库中保存的数据与客户端进行比较.如果黑客窃取某人的会话ID,则黑客可能没有匹配的IP和/或用户代理,使得用户不匹配,这允许您显示或隐藏某些内容.
您必须手动比较数据.
基于文件的会话的常见安全性错误是将它们存储在/tmp另一个共享目录中,其中第三方可以访问数据; 特别是在共享主机上,这可能是个问题.但是,这可以通过适当的文件权限来防止.
将它们存储在数据库中意味着您具有数据库的所有访问限制,但这也意味着您需要正确配置它们并安全地设置数据库的物理存储.
它提高了性能,因为数据库服务器有更多层通过缓存和内存存储来提高性能,而基于文件的会话总是会产生磁盘访问.由于您可以选择其他并发机制而不是文件锁定,因此可以改进并发访问.如果您的数据库服务器已经忙于常规数据库工作,那么另外抛出会话处理可能是也可能不是一个好主意.