2012-12-31 61 views
0

可能重複:首先是 「汽車」 如如何取消設置會話變量具有一定的前綴

$_SESSION["cars_registration"]; 
$_SESSION["cars_make"]; 
$_SESSION["cars_model"]; 
$_SESSION["cars_variant"]; 
. 
. 
. 
$_SESSION["cars_date_created"]; 

How to unset/destroy all session data except some specific keys?

我有一定的會話變量

我想知道僅用於刪除/刪除/清空這些代碼以汽車爲前綴的會話變量如上所述。

到目前爲止,我已經實現了這一點,但沒有任何關於取消設置它們的代碼的想法。

foreach($_SESSION as $key => $value) 
{ 
    if (strpos($key, 'cars_') === 0) 
    { 
     // Need to delete/unset the session variables 
    } 
} 

請幫我一下吧

+5

'unset($ _ SESSION [$ key])'有什麼問題? – Rikesh

回答

4

你差不多了!!!

foreach($_SESSION as $key => $value) 
    { 
     if (strpos($key, 'cars_') === 0) 
     { 
      unset($_SESSION[$key]); //add this line 
     } 
    } 

這裏有一些解釋。裏面設置$keyforeach是一個變量來保存$_SESSION陣列每次迭代的key,它的工作原理與$value

參考相同:

http://php.net/manual/en/control-structures.foreach.php

+0

使用'==='有一個很好的理由。如果未找到針,則「strpos」返回「FALSE」。 'strpos('cats_registration','cars _')'將返回'FALSE'和'FALSE == 0',並且當它不應該時,該鍵被移除。 –

+0

@SalmanA剛剛修改了我的答案謝謝 –

+0

@Mahan - 幫助好友 – Asnexplore

3

只需使用unset

foreach($_SESSION as $key => $value) 
{ 
    if (strpos($key, 'cars_') === 0) 
    { 
     unset($_SESSION[$key]); 
    } 
} 
0

session_unregister - 取消註冊來自當前會話的全局變量 從PHP 5.3.0開始,此函數已被棄用。依靠這個功能是非常不鼓勵的。

session_unset - 免費的所有會話變量 不要將已取消了整個$ _SESSION與未設置($ _ SESSION),因爲這將通過$ _SESSION超全局變量的登記。

session_destroy - 銷燬註冊到會話

0

使用PHP的所有數據,你可以使用unset爲 '毀滅' 的變量。所以,一旦你確信關鍵滿足你的標準,你可以這樣做:

unset($_SESSION($key)); 
5

好,我很高興地看到,仍然能夠忽視了有目共睹的。

有很多方法,你可以用循環和各種各樣的事情做到這一點,但是正確辦法做到這一點是使用一個子陣列cars,你可以一次過輕易摧毀。的

因此而不是創建

$_SESSION["cars_registration"]; 
$_SESSION["cars_make"]; 

等,您將創建:

$_SESSION["cars"]["registration"]; 
$_SESSION["cars"]["make"]; 

所以當你來取消它,你只需要做:

unset($_SESSION["cars"]); 

$_SESSION可以像其他任何陣列一樣在多維結構中保存數據 - 它不需要是單位值的集合。

+2

+1,我在想這個,爲什麼不讓汽車成爲一個陣列。 –