替代巨大的Codeigniter会话数据

时间:2014-02-14 04:13:29

标签: php database codeigniter session optimization

我已经看到很多关于溢出的类似问题,但是没有一个真正解决了我的情况,因此我打开了这个问题。

我正在开发一个项目,其中有数千个mp3曲目和混音的数据库。每个mp3文件都有一个id和数据库的相关信息。现在正在构建购物车,用户可以选择曲目并添加到购物车。当一个轨道被添加到购物车时,它的id存储在会话中,这很好。

现在,当会话中存储了大量id时,问题就会到来。作为cookie [codeignitor]的会话,我知道它有4kb的存储空间。

保留此数据的最佳做法是什么?我知道我必须改变策略并停止使用会话。

我尝试使用数据库[mysql],它不仅速度慢而且还有几个问题,比如每个新用户需要在数据库表中添加一行,如何在使用后清除这些表等等。

我尝试使用memcached,但我认为这不是正确的选择,因为我试图存储的数据并不是那么大。 memcached在Windows平台上也有几个问题,前提是我不确定客户端是否会在linux / windows服务器上部署它。

我需要一个原生的跨平台解决方案。我做了很多研究,并没有找到可靠的解决方案。

我使用codeigniter框架,因此您可以推荐任何PHP或codeigniter解决方案,非常感谢。

4 个答案:

答案 0 :(得分:1)

你谈到在会话中存储东西,所以我假设你正在使用PHP的会话处理程序,而不是单独设置cookie。

在这种情况下,会话存储全部在服务器端完成,因此不适用4k限制。在请求期间查看您的http标头,您将只看到如下内容:

Set-Cookie: PHPSESSID=1234abcde56789f

此会话ID指的是一个文件(通常存储在目录中,例如RHEL发行版上的/var/lib/php/session/),其中包含作为序列化PHP对象的实际数据。

答案 1 :(得分:0)

为什么不在php中尝试setcookie()函数? 您可以在cookie中存储所需的大量数据,并将参考存储在数据库中的会话中! 希望你能理解我的答案!

答案 2 :(得分:0)

miken32说的是正确的。如果您使用Codeigniter,则设置会话数据库表并使用codeigniter会话。如果你使用db表,那么它只是一个在cookie上设置的id 。确保并从官方codeigniter会话数据库表开始,以便它正常工作。

codeigniter会话类内置了'垃圾收集'。

这里都解释了,向下滚动数据库部分: http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

答案 3 :(得分:0)

使用本机PHP会话是正确的移动方式,因为其他用户回答了php会话只将id存储到cookie中,但codeignitor的行为不同,它将所有数据存储到cookie中,这就是catch的位置

继续正常的PHP会话是一件痛苦的事情,因为我必须在整个项目中更改代码。经过一些研究和测试后,我得出结论[CI的本地会话库] [1]

[1]:Derek Jones的https://github.com/EllisLab/CodeIgniter/wiki/Native-session是使用具有相同CI会话功能和语法的CI上的PHP会话的绝佳替代方案。

总而言之,要么从头开始使用PHP会话,要么使用此库作为克服CI会话大小限制的替代方法。