在PHP类中使用cookie和会话

时间:2012-01-17 14:49:32

标签: php oop session cookies

我有一些功能(粘贴在一小块功能下面),我用它作为单独的功能,效果很好。

现在我想将这个功能转移到某个类中。如您所见,它适用于$_SESSION$_COOKIE

问题是,在调用此函数时是否需要发送$_SESSION$_COOKIE作为输入数据(我的意思是这样的:调用protect($_SESSION, $_COOKIE)然后从函数内部获取它们)?或者它可以在不发送的情况下工作?

...
public function protect() {
    session_start();

    if (isset($_SESSION['HTTP_USER_AGENT'])) {
        if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) {
            $this->logout();
            exit;
        }
    }

    if (!isset($_SESSION['id']) && !isset($_SESSION['login'])) {
        if (isset($_COOKIE['id']) && isset($_COOKIE['key'])) {

 ...

3 个答案:

答案 0 :(得分:3)

$_COOKIE$_SESSIONsuperglobals,这意味着它们随处可用。您永远不需要导入它们,将它们作为参数或类似的东西传递,它们始终可用于任何范围。

出于这个原因,他们应该始终被视为只读 - 为它们分配新值将影响每个范围内的其余脚本执行。

答案 1 :(得分:2)

$_SESSION AND $_COOKIE是超全球,意味着它们适用于所有范围。因此,将它们作为参数传递给函数并不是绝对必要的。

但是,在开始单元测试时,将它们作为参数传递是有好处的。通过参数,可以更轻松地测试函数的值,而无需在$_SESSION$_COOKIE中使用它们。

答案 2 :(得分:1)

您不需要传递$_SESSION$_COOKIE变量,因为它们是超级全局变量 - 可以从任何地方访问... from the docs

  

这是一个“超全球”或自动全局变量。这仅仅意味着它在整个脚本的所有范围内都可用。没有必要做全局$变量;在函数或方法中访问它。