【问题标题】:Are there limitations in PHP session handling?PHP 会话处理有限制吗?
【发布时间】:2011-09-13 11:33:20
【问题描述】:

我看到许多网站放弃使用 PHP 中的默认会话处理方法,而我仍然不知道为什么。

他们肯定在运行 PHP,而且在我看来,人们会设计自己的方法毫无意义。是否有某种我不知道的限制,或者纯粹是为了让他们控制一切?

(我试过问他们,是的,他们要么没有联系方式,要么在不知道实际情况的情况下“在某处看到了反对使用 PHP 会话的东西”)

【问题讨论】:

    标签: php session


    【解决方案1】:

    默认会话存储在硬盘上,通常在 /tmp 目录中。 当您的网站变得更大时,一台计算机不足以运行它。 因此,人们求助于负载平衡(以及其他解决方案)。

    负载平衡器有效地在一组计算机之间切换。因此,如果有任何机会在您的第一个请求中由计算机 #1 提供服务,然后在您的第二个请求中由计算机 #2 提供服务 - 第二台计算机无法读取会话,因为它不在其 /tmp 文件夹中。

    这当然是一个简化的场景,因为应用程序的扩展还有很多,但这是人们求助于覆盖默认会话机制的原因之一。

    另一件有趣的事情是将会话存储在数据库中,从而使它们可搜索,而其他东西则不可搜索。您还可以创建一个界面来有效地强制注销人员,这是默认机制无法提供的。

    【讨论】:

    • 嗯,有道理,事实上,我现在很可能会在我的大多数项目中这样做。谢谢!
    • 我不确定。通常,一个会话可以存储少于 1k。因此,如果我们有 100 万用户,那么我们在会话中使用 1gb,并且每台机器都可以容纳它。此外,还有一种使用内存和其他方式存储会话的方法,所以这不是问题而是:过度使用会话的系统(存储超过 1mb 的信息,甚至是二进制文件!)和不关心被盗 cookie 的会话.
    【解决方案2】:

    我认为滚动您自己的会话处理功能的主要原因是为了测试。如果您正在运行单元测试,则不一定会有浏览器环境运行。您将无法设置 cookie,因此 PHP 不会为您设置 $_SESSION 变量。

    但是,如果您编写了自己的会话处理类,那么您可以创建一个模拟类来运行单元测试。该对象的行为类似于“真实”会话,但您不必为浏览器、cookie 和人类而烦恼。

    【讨论】:

    • 我明白了,感谢您的洞察力,每天都能学到新东西。也感谢您对第一篇文章的拼写编辑!
    【解决方案3】:

    使用标准设置,您可以使用文件系统、保存未加密的会话数据等。

    使用session_set_save_handler 编写您自己的会话处理,您可以根据需要调整会话管理...应用加密、将会话保存在数据库中、将会话与单独的软件系统同步...

    【讨论】:

      【解决方案4】:

      1) Session 仍然被广泛使用。他们工作并完成工作,因此除非有特殊情况,否则没有必要更改它。

      2) 但是,Session 很弱,它依赖于单个 PHP(可能被盗)。但是,可以使用 cookie + ip + 过期等不同的方法来保护会话。

      所以是和不是。 Session 仍然被广泛使用,但需要微调。

      【讨论】:

        猜你喜欢
        • 2018-02-04
        • 2011-07-03
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        相关资源
        最近更新 更多