我有一个快速的search,似乎所有相关问题都没有达到我的观点,或者太具体而无法帮助我。
我首先考虑的是表现。我的理解是,默认情况下,在$_SESSION
内存储信息意味着服务器将文件写入磁盘。对于小型LAMP服务器或基本的小型托管网站,在数据库成为更有效的选项之前,您的$_SESSION
变量需要有多大。 $_SESSION
中的10,100,1000,10000阵列成员是否会开始考虑使用数据库?或者流量是否需要考虑?
第二个考虑因素是安全性。在其他一些答案中,我看到过像“从未在$_SESSION
变量中存储xxx”这样的语句。在数据库中存储信息实际上是否使其比$_SESSION
更安全,或者在服务器设置正确的情况下,可以使$_SESSION
与数据库一样安全吗?
我的感觉是,许多在野外开发的网站将首先使用$_SESSION
开始,并且不一定会重构使用数据库。如果您仍然可以将$_SESSION
变量从文件重定向到数据库,那么总是更好地使用$_SESSION
然后在数据库中指出性能是否有问题?
此设计选择还有其他考虑因素吗?
答案 0 :(得分:3)
你错过了主要的东西,即你在数据库中存储的任何内容都是无限期持久的,而会话只会持续到用户注销或过期。
因此,与会话相比,在数据库中存储内容的主要原因是您希望保留。
在任何需要可扩展性的网站上,无论如何,您实际上都会将会话存储在数据库中,因此关于性能的第一点是无关紧要的。
至于安全性,只要会话数据被正确加密,它就足够安全。
答案 1 :(得分:1)
我个人只会使用会话来存储最少的信息。如果您需要在会话中存储10,000个数组项,则很可能以不同方式编写它们。
默认情况下,PHP会话存储在磁盘上。
某些发行版附带了一个名为suosin http://www.hardened-php.net/suhosin/的强化PHP,它可以设置为加密会话。
至于会议的效率如何,我会说非常。您可能永远不必担心这一点,如果您遇到问题,您可能希望将会话存储在内存而不是磁盘/数据库中。
可以更改PHP会话的存储/加载方式,请查看: http://php.net/manual/en/session.customhandler.php
答案 2 :(得分:0)
我认为我不会太担心会话文件的大小,因为它使用数据库的可扩展性更高,我怀疑你会注意到中小型网站的性能差异很大。
对于安全方面,不建议在会话中存储用户数据(用户名,哈希,电子邮件)。如果你想使用纯粹的会话,你可以考虑加密你的会话,许多框架,如CodeIgniter提供。
总而言之,在我看来,你应该始终使用数据库来获取用户信息(包括IP地址)和一般数据的会话(搜索术语,分析等......)
希望这可以帮助您做出决定。
此致 詹姆斯