1

我进行了快速搜索,似乎所有相关问题都没有完全达到我的目的,或者太具体而无法帮助我。

我首先考虑的是性能。我的理解是,默认情况下,存储信息$_SESSION意味着服务器将文件写入磁盘。$_SESSION对于小型 LAMP 服务器或基本的小型托管网站,您的变量需要获得多大才能使数据库成为更有效的选择。10、100、1000、10000 个数组成员$_SESSION会是您开始考虑使用数据库的地方吗?还是流量更重要?

第二个考虑是安全性。在其他一些答案中,我看到了诸如“永远不要将 xxx 存储在$_SESSION变量中”之类的语句。将信息存储在数据库中实际上是否比 更安全$_SESSION,或者如果$_SESSION服务器设置正确,可以使其与数据库一样安全?

我的感觉是,许多在野外开发的网站一$_SESSION开始都会使用,不一定要重构才能使用数据库。如果$_SESSION无论如何您都可以将变量从文件重定向到数据库,那么使用它总是更好,$_SESSION如果性能是一个问题,以后再指向数据库?

对于这种设计选择,是否还有其他考虑因素?

4

3 回答 3

3

你错过了主要的事情,那就是你存储在数据库中的任何东西都是无限期的,而会话只持续到用户注销或过期。

因此,与会话相反,将某些内容存储在数据库中的主要原因是您希望保留它

在任何需要可扩展性的站点上,您实际上都会将会话存储在数据库中,因此关于性能的第一点是无关紧要的。

至于安全性,只要对会话数据进行适当的加密,就足够安全了。

于 2013-03-12T11:56:08.553 回答
1

我个人只会使用会话来存储最少的信息。如果您需要在一个会话中存储 10,000 个数组项,则很可能以不同的方式编写。

默认情况下,PHP 会话存储在磁盘上。

一些发行版带有名为 suosin http://www.hardened-php.net/suhosin/的强化 PHP ,它可以设置为加密会话。

至于会议的效率如何,我会说非常。您可能永远不必担心这一点,如果您遇到问题,您可能希望将会话存储在内存中而不是磁盘/数据库中。

可以更改 PHP 会话的存储/加载方式,请查看: http: //php.net/manual/en/session.customhandler.php

于 2013-03-12T11:56:41.717 回答
0

我认为我不会太担心会话文件的大小,因为使用数据库更具可扩展性,我怀疑您会注意到中小型站点的巨大性能差异。

至于安全方面,不建议将用户数据存储在会话中(用户名、哈希、电子邮件)。如果您想使用纯会话,您可以考虑加密您的会话,许多框架(如 CodeIgniter)提供。

总而言之,在我看来,您应该始终将数据库用于用户信息(包括 IP 地址)和会话用于一般数据(搜索词、分析等......)

希望这可以帮助您做出决定。

问候,詹姆斯

于 2013-03-12T11:53:25.053 回答