gpt4 book ai didi

php - 可以安全覆盖超全局 $_SESSION 吗?

转载 作者:可可西里 更新时间:2023-10-31 22:06:43 24 4
gpt4 key购买 nike

用专门的 session 对象覆盖超全局 $_SESSION 是否安全?

class SessionObject implements ArrayAccess { ... }

...

// Session data has just been deserialised from store.
$_SESSION = new SessionObject( $session_data );

...

// Using session object...
$_SESSION['key'] = 27;
$x = $_SESSION->get_data('key2', 'default-value');

最佳答案

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

我认为以这种方式滥用 $_SESSION 的超全局特性是一种 hack,也是一种令人不快的 hack。

在我看来,更好的方法是编写一个带有静态方法的类来获取和设置您的数据:

class Session {
public function get($key, $defaultValue = null) {
// do some code to get the value for $key, and return $defaultValue if there is none
}

public function set($key, $value) {
// do some code to set $key
}
}

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

由于类本质上是全局的,因此您可以从代码中的任何位置访问它。这并不令人惊讶,并且会减少后续的困惑。

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

关于php - 可以安全覆盖超全局 $_SESSION 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com