PHP - 啥是会话变量的替代品

Posted

技术标签:

【中文标题】PHP - 啥是会话变量的替代品【英文标题】:PHP - what is an alternative to session variablesPHP - 什么是会话变量的替代品 【发布时间】:2011-12-08 05:44:59 【问题描述】:

我在会话中存储了很多变量,这会产生性能问题。 所以,我被要求将它存储在其他地方,我可以将它存储在数据库中,但这又会很慢。

有没有更好的替代方法来存储会话变量? 全局变量是每个文件/请求。虽然 cookie 会向用户开放变量,但不会将其保留在服务器端。

提前感谢您的回答!

【问题讨论】:

【参考方案1】:

这取决于“很多”变量有多少? rails 的默认会话存储是使用 cookie,这通常对我来说已经足够了。如果您担心暴露变量,cookie 会被加密。你必须有它的服务器端吗?使用 html5,您有 localStorage 选项。

【讨论】:

【参考方案2】:

php 会话可以配置为以多种方式工作。如果服务器上有足够的可用内存,则可以从 memcache 运行它。那将是高性能

您也可以使用数据库来存储会话信息,但正如您所说,这可能会很慢。

为什么它目前会产生性能问题? 是否正在创建大量会话,或者您是否在会话中存储了大量数据?

【讨论】:

我在会话中存储了大量数据【参考方案3】:

考虑使用memcached 来获取像这样的半持久性数据。将缓存键存储在$_SESSION 中,然后使用它来获取您的缓存数据。

由于memcached 将所有内容缓存在内存中(并且严格来说是键值存储),因此它比数据库更快。这对于会话之类的东西来说有点理想,因为如果您碰巧丢失了缓存的数据,不会丢失任何严重的数据(用户只是意外退出)。

事实上,PHP Memcache 实现 provides a session handler(参见示例 #2)可以透明地为您处理会话,而无需您对代码进行任何修改。

【讨论】:

我可以使用 memcached 存储自定义键值变量吗?它是否像会话一样以每个用户为基础进行维护? 查看我编辑的内容 - PHP 实际上有一个会话处理程序已经为您透明地实现了它,因此您可以继续使用$_SESSION 并简单地获得memcached 的性能优势。但是是的,您也可以在其中任意存储键值数据,请参阅文档。 我对此并不陌生,您的意思是说您提到的链接中的示例 #2 将使用 memcache 存储我的会话变量?而不是正常的会话存储? 正确,这正是它的作用。

以上是关于PHP - 啥是会话变量的替代品的主要内容,如果未能解决你的问题,请参考以下文章

adobe ASL(亚当和夏娃)还活着吗?啥是替代品?

[FFmpeg]啥是已弃用的 avpicture_alloc、avpicture::data 的替代品

对于相对较新的计算机,啥是 ol' C++ Beep() 的好替代品?

为啥从 WCF 服务返回数据集或数据表不是一个好习惯?啥是替代品?

System.Json 已弃用。啥是替代方案? [关闭]

Android getAllNetworkInfo() 已弃用。啥是替代方案?