【问题标题】:OOP Object in Session, when not to?Session中的OOP对象,什么时候不呢?
【发布时间】:2014-03-04 19:55:39
【问题描述】:

我想知道什么时候不应该在会话中存储对象?

我正在开发一个用户驱动的系统,我需要定义消息,例如,登录后“欢迎回来用户”,或错误的登录信息,这些消息有不同的类型“错误,成功,警告等...”所以我为它创建了一个控制器,我从该消息类创建一个新对象,将其作为序列化附加到视图,视图将其反序列化,然后将其从会话中删除。

我只是有一种感觉,我在这里犯了一个错误,从性能角度来看是否可以使用这种方法,它可能存在哪些安全问题,以及对象是否保留在服务器端内存中?还是我也应该冲洗它?

【问题讨论】:

    标签: php oop session object


    【解决方案1】:

    术语:

    这些类型的行为通常称为message flashes。它们由大多数 Web 框架和所有 Web 应用程序实现。

    有些使用对象来表示它们,有些只是数组。如果您的“消息对象”不是很复杂,则没有理由认为它会成为性能负担。

    安全性:

    在安全方面,PHP 中的会话数据保持序列化(您不需要自己序列化)并存储在服务器硬盘上某处的文件中。可以根据会话 ID cookie(PHP 在您使用 session_start() 时设置的)检索它。

    您的安全问题通常与会话数据的安全性有关,而不是会话中存储的消息的安全性,因此您可以单独研究会话数据安全的主题。

    设计:

    将消息存储在会话中直到它们显示给用户(然后将它们从会话中删除)是司空见惯的,您不必担心这种方法的安全问题。

    另一方面,大多数 MVC 框架将在每个页面使用一个控制器,这意味着创建一个特定的控制器只是为了处理消息是没有意义的(除非您的 MVC 使用多个控制器来呈现一个页面)。

    【讨论】:

    • 非常感谢这个非常描述性和令人宽慰的答案,我想我只是缺少一些 MVC 开发经验,感谢像你这样的人,我们学得更快
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多