PHP 5.6取消设置$ _SESSION子数组条目

时间:2015-07-07 08:03:51

标签: php session unset array-unset

我有以下功能:

public function stopWatcherSession($sessionID) {
    if(array_key_exists($sessionID, $_SESSION[self::WATCHER_SESSION_KEY])) {
        foreach ($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]['names'] as $v) {
            $ptype = $this->paramTypeFromName($v);
            unset($_SESSION[self::SESSION_KEY][$ptype][$v]); //does not work, sets entry to null
        }
        unset($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]); //does not work, sets entry to null
    }
}

正如评论所说,数组条目未设置,array_key_exists() - 函数仍会返回true,如果您var_dump($_SESSION)可以看到$_SESSION[self::WATCHER_SESSION_KEY][$sessionID]是空的。

如何取消设置变量,以便删除数组中的键?

我尝试的东西,但没有用:

// v1 (tried also for `$_SESSION[self::WATCHER_SESSION_KEY][$sessionID]` )
$tmp = $_SESSION[self::SESSION_KEY][$ptype];
unset($tmp[$v]);
$_SESSION[self::SESSION_KEY][$ptype] = $tmp;

//v2
unset($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]);
session_write_close();
session_start();

//v3 => v1 & v2 combined
$tmp = $_SESSION[self::SESSION_KEY][$ptype];
unset($tmp[$v]);
$_SESSION[self::SESSION_KEY][$ptype] = $tmp;
session_write_close();
session_start();

我可以在整个代码中添加一个糟糕的黑客来检查它是否为null,但是然后»empty«值必须更改为其他内容(如预定义的const,但这是一个讨厌的解决方法并导致混淆对于其他开发者!)

有人有想法吗?

1 个答案:

答案 0 :(得分:2)

搞定了:

$http.get('/ServerRequest/PutDataResponse?firstname=bob&lastname=smith&age=12') 完成这项工作。

http://php.net/manual/en/function.unset.php说:

  

函数内部的unset()行为可能会有所不同,具体取决于您尝试销毁的变量类型。 [...]取消设置()函数内部的全局变量,然后使用$ GLOBALS数组执行此操作

看起来像经典»在某些情况下,PHP行为未定义«-example。