2012-12-12 48 views
2

我有這個PHP腳本啓動會話並創建其變量。下面的代碼片段:在其他變量上使用它們時PHP會話變量丟失

<?php 
session_start(); 
if (!is_array($_SESSION['cart'])) $_SESSION['cart'] = array(); 
$id = 10; 
$_SESSION['cart'][$id] = array('cod' => 'ABC', 'price' => '80', 'status' => 'active'); 
header('Location: http://www.example.com/checkout.php'); 
?> 

當我使用的print_r輸出$ _SESSION數組,我得到這個:

Array (
    [cart] => Array (
     [136] => Array (
      [cod] => ABC 
      [price] => 80 
      [status] => active 
     ) 
    ) 
) 

這個偉大的工程:用戶會話創建和它的所有變量設置得很好,然後用戶重定向到結帳頁面。

但有一個問題:當用戶到達結帳頁面時,一切看起來都很好。見代碼片段:

<?php 
session_start(); 
print_r($_SESSION); 
?> 

上述的print_r的輸出正是我們所見過的:和陣列填充其它陣列。大!但是這裏開始怪異的部分:當我使用任何會話變量設置爲另一個變量的值時,會話數據丟失。檢查出來:

<?php 
session_start(); 
print_r($_SESSION); 
$cart = $_SESSION['cart']; 
foreach ($cart as $key => $data) : // if I use foreach($_SESSION['cart'] as $key => $data) will be the same thing 
    /*** Do stuff here ***/ 
endforeach; 
?> 

的print_r的輸出上面是:

Array (
    [cart] => Array (
     [cod] => ABC 
     [price] => 80 
     [status] => active 
    ) 
) 

事實上,如果我沒有在腳本中使用它們只是輸出變量值,一切正常。但是當我在腳本中的某個地方使用某個變量時(甚至在將代碼片段放入之後)會話變量丟失了其中的一些數據。

我試圖序列化$_SESSION['cart']變量,但每次我想要獲取它的值時都會反序列化它非常煩人。

任何人都可以幫助我嗎?

+0

有你'register_globals'嗎?這可能會解釋一些奇怪的覆蓋...如果你有,禁用它並再次測試。 – Wrikken

+0

是的!你是對的!經過8小時試圖解決這個問題,我總是從你那裏得到答案@Wrikken!非常感謝! –

回答

0

我覺得有一個問題在處理這樣的東西在這裏的foreach部分,你可以檢查此同時處理:任何機會

foreach ($cart as $key => $data) 
{ 
if(is_array($data)){} 
}