這是用來獲取列表中曾擔任標記從會話:PHP會話看起來腐敗
session_start();
if(!isset($_SESSION['markers'])) {
$_SESSION['markers'] = array(0);
$list = '0';
} else {
$list = implode(', ', $_SESSION['markers']);
}
我用$list
得到還沒放送標記:
SELECT * FROM `markers` WHERE {other conditions} AND `marker_id` NOT IN($list)
然後對返回的每一行我將標記ID添加到會話中:
while ($row = mysqli_fetch_assoc($result)){
$_SESSION['markers'][] = (int) $row['marker_id'];
...
}
但是,在服務一些mar kers(比如說8,36)會話看起來是腐敗的。 var_dump($_SESSION);
輸出:
array(1) {
["markers"]=>
&array(3) {
[0]=>
int(0)
[1]=>
int(8)
[2]=>
int(36)
}
}
我說這已損壞,因爲當我手動做出類似陣列(codepad here)輸出不顯示在第三行中一個&
- 它是array(3)
,不&array(3)
。這是什麼造成的?
更新
@Marc B被暗示會話未損壞。他的看法是我們只有一個變量($ _SESSION),其中包含對數組($ markers)的引用,而不是數組本身;和這不是一個損壞的變量。那麼,會話是對於會話使用目的已損壞。兩個標誌:
- 第二次調用同一個腳本(其中我猜
else
路線採取)導致fatal error
:Fatal error: Cannot use object of type DOMElement as array in ... on line 47
。第47行是我們嘗試向陣列添加新標記ID的地方:$_SESSION['markers'][] = (int) $row['marker_id'];
- 當我試圖反序列化會話文件的實際內容時,它失敗(codepad here)。
這不是「腐敗」 - 某些東西只是將該數組轉換爲對數組的引用。 –
它看起來像一個數組引用,但我不知道答案爲什麼發生,我可能會建議嘗試在while循環中使用array_push,例如, array_push($ _ SESSION ['markers'],(int)$ row ['marker_id']); –
@Mark - 所有會話觸摸代碼是上面顯示的內容。現在,將數組轉換爲對它的引用是什麼? –