会话变量

时间:2009-08-11 14:49:32

标签: php performance apache memory

嗨伙计们。我目前正在开发一个项目,该项目使用存储在会话变量中的大量数据。我的问题是这种方法的可靠性如何影响服务器性能和内存使用情况。基本上,你会在会话变量和cookie之间做出选择。

8 个答案:

答案 0 :(得分:2)

通常,会话变量会更安全,因为用户无法在他/她的机器上本地编辑它们。

但真正的问题是,你想要存储什么?通过更多信息,我们可以为您提供更好的答案,以便您可以将其存储在哪里:)

<强> Edit:

如果您希望存储用户操作,我可能会建议您按照这些行构建UserActions表。包含以下内容的表:

id INT (generic ID for the record),
timestamp TIMESTAMP/DATETIME (whatever your DB supports),
userid INT (lookup to the user table),
action VARCHAR (what action you want to record),
etc etc (whatever else you want to store)

然后,当用户执行您要记录的操作时,只需将其记录到表本身,而不是让它与会话/ cookie中的用户一起旅行。实际上,页面本身不需要知道用户过去执行了什么操作,除非它是“多步骤向导”类型的应用程序。在这种情况下,最好将它们作为会话变量传递。

然后,您将存储推送到真正的存储组件(作为数据库),而不是将session / cookie作为存储。

我的意思是我们仍然不知道你究竟在发展什么,但我希望它有所帮助。

答案 1 :(得分:1)

会话变量通常比cookie更可取。也就是说,它们通常存储在Web服务器上的/ tmp目录中,该目录是世界可读且可以全局写入的。如果您不控制服务器或在共享环境中运行,这可能是恶作剧的滋生地。不将敏感信息存储在会话变量中,而不是依赖它们来处理必须工作的东西是一种很好的做法。

答案 2 :(得分:0)

如果您需要每个用户的数据在会话中保持不变,那么您应该只使用Cookie。也就是说,如果他们重新访问会话到期时间 之外的网站,那么你需要那里的数据。

否则,如果数据仅用于当前会话,则继续将其放入$ _SESSION。这就是它的用途。

答案 3 :(得分:0)

会话数据通常存储在服务器或数据库中的文件中。那么有多少数据只取决于您的脚本。如果要在会话中存储大二进制文件,则可能会很快达到内存限制。

将数据存储在cookie中并不总是一个好主意。这些数据对客户来说是可见的,他可以很容易地改变它,在某些情况下,这些数据是你不能允许的。

答案 4 :(得分:0)

会话变量不需要用户提交,只需基于会话密钥加载。内存使用情况取决于会话实现,因为从数据库(或文件系统,内存或w / e)检索会话的成本。

答案 5 :(得分:0)

总是在保持服务器上的信息(使用更多内存)和将一些数据推送到客户端计算机(更多带宽和更低安全性)之间进行权衡。根据经验,我更喜欢会话,它们更安全,更易于管理。

答案 6 :(得分:0)

当我写这个问题时,我正在思考非敏感数据以及在网站上记录用户活动的应用程序。我认为,对于繁忙的服务器,拥有大量用户,最好使用cookie,它将卸载服务器资源(内存,硬盘I / O)。在性能方面,我认为会话变量是更好的解决方案。 无论如何,我不知道如何更好地扩展SV解决方案。

答案 7 :(得分:0)

使用任何会话变量 - 完全意味着 - 您的应用程序服务器需要通过适当的同步来维护会话状态。

这有一个开销,可能会对应用程序的可伸缩性产生负面影响,因为每个服务器都需要知道(可能)每个会话 - 这意味着会话数据和同步的很多跨服务器流量。

虽然你只有一台服务器,但没关系。

当越来越多的服务器在地理位置上分布时,它会变得越来越痛苦。

会话的序列化/反序列化有一些开销,但实际上这不是一个问题,因为每个请求都会相对固定,因此可以扩展到高流量应用程序。