使用专门的会话对象覆盖超全局$_SESSION是否安全? 通用标签

有帮助吗?

解决方案

虽然这可能有效,但我认为这不是明智的行为。在我看来,最不惊奇的原则适用于编程以及用户界面设计。如果您在脚本中覆盖了$_SESSION的默认行为,那将使一些将来不得不处理您的代码的程序员感到困惑。

我认为以这种方式滥用$_SESSION的超全局性是一种黑客手段,也是一种令人不愉快的事情。

我认为更好的方法是编写一个带有静态方法的类来获取和设置数据: 通用标签

然后您可以使用Session::get('someKey')Session::get('someKey', 'default')Session::set('someKey', 'someValue')来访问它。

由于类本质上是全局的,因此您可以从代码中的任何位置访问它。这样就不足为奇了,并且可以减少沿线的混乱。

如果出于某种设计原因确实想使用对象方法,则最好实现Singleton模式。

其他提示

对我来说似乎有点冒险。您是否已签出 session_set_save_handler 方法?它使您可以指定要使用的处理程序,而不必尝试覆盖$ _SESSION。

如果您自己处理会话处理和存储,那么您可以做任何您想做的事情。在这方面,可以像其他任何变量一样使用$ _SESSION超全局变量。

这是唯一的PHP默认会话处理程序,对其进行特殊处理。它期望在那里有一个普通数组(并且也不能被数字索引)。如果您想再次使用它,则需要通过关闭调用来撤消花式ArrayObject包装: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top