用于存储大量数据的PHP会话?

时间:2009-01-20 07:11:50

标签: php session

我正在开发一个媒体书签网站,我正在寻找一种方法来记住用户是否已经为某个项目添加了书签(无需每次加载页面都要检查数据库)。

之前我没有使用PHP会话,但我认为他们会这样做。

在用户登录时进行初始数据库调用是否有意义,抓取用户已添加书签的所有项目并将所有项目ID的数组保存到用户会话中?

然后当页面被加载时,对于页面上的100个项目中的每一个,它将检查该项目的ID是否在会话数组中(因此我们知道是否显示“书签”按钮或指示他们是已经为它加了书签。)

只是想确保这是一个正确的策略,或者是否有更好的方法。即使数组中有10,000个ID,这样也能正常工作吗?

8 个答案:

答案 0 :(得分:6)

同样你可以看看Memcached扩展 - 它使用服务器的内存作为数据存储。

答案 1 :(得分:4)

请记住,用于提高会话管理的健壮性和速度的常见PHP策略是将会话数据存储在数据库中。你似乎朝着相反的方向前进。

答案 2 :(得分:2)

我建议您查看数据库,而不是将此数据存储到会话中。如果你在那里有很多信息,你会在高负荷网站上快速堵塞内存。 只是做一些缓存,你应该没事。

答案 3 :(得分:1)

在会话中存储数据也意味着数据将在大约15分钟后丢失(默认情况下,但可能会有所不同)。

Imho你应该将数据保存到数据库,然后使用一些缓存进行后续读取(即memcache,如@Mark Tyler所说)。

答案 4 :(得分:1)

不要高估每个页面加载一次到数据库的糟糕程度。你会发现许多(和很多)PHP应用程序正在做你正在谈论的事情。许多应用程序从数据库中提取页面的各个部分,获取用户数据,论坛数据,新闻等等,因此单个页面加载可以运行~30个查询。

在Cookie中存储唯一ID,并以智能方式将要存储的会话信息存储在数据库中。

你可能想得太远了。这里的一个好方法是以合理的方式构建您需要的功能(即服务器端),监视您的系统资源(数据库负载,Web服务器负载),然后如果您注意到问题,重构解决它。

答案 5 :(得分:0)

好吧,如果你想做一些荒谬的事情,你可以使用Javascript将所有数据存储在客户端的浏览器上,在某些对象中可以幸存页面更改。我不推荐它,因为它给你带来了很多麻烦,但我想到了所有奇怪的AJAX-y解决方案,它可能是有趣的: - )

答案 6 :(得分:0)

我建议使用ADODB for php。它内置了查询缓存和SQL注入保护等。您可以在http://phplens.com/lens/adodb/docs-adodb.htm#caching了解有关缓存功能的更多信息

答案 7 :(得分:0)

这里最好的解决方案是在数据库中有一个收藏夹/书签表,让它包含user_id和item_id,并为项检索逻辑添加连接。

然后您不需要运行其他SQL命令也不需要在会话中存储任何内容,您只需要检查这些收藏列是否存在。