2012-04-01 58 views
2

我有一個關於php setcookie的問題。
當用戶在我的服務器上傳文件時,它會設置cookie來存儲文件名。
setcookie(「user」,$ filename,time()+ 3600);關於php setcookie

輸出代碼:
您近期上傳的內容: echo $ _COOKIE [「user」];
例:你最近上傳的圖片:abc.zip

但是,當用戶上傳新文件, 新的文件名會覆蓋舊的文件名。
我該怎麼做。不要覆蓋舊的文件名。
例子:
您近期上傳圖片:
abc.zip
def.zip
ghi.zip
.........
.........


謝謝!

+1

您應該將它存儲在會話中而不是cookie中,只需使用數組而不是字符串。 – Corbin 2012-04-01 03:25:13

+0

同意Corbin +1。存儲在cookie中的唯一原因是如果您想要在會話中持續存在。 – 2012-04-01 03:36:21

+0

@heyman問題通過選中對您最有用的答案旁邊的勾號來標記爲答案。隨時接受答案,並從問題標題中刪除「[已解決]」。 – 2012-04-01 03:41:16

回答

0

在這裏你去,試試這個:

$old_cookie = $_COOKIE["user"]; 
setcookie("user", $filename+"<br />"+$old_cookie, time()+3600); 
+0

謝謝,我會稍後再試! – heyman 2012-04-01 03:37:45

3

保存文件名的序列化的陣列結構,就像一個JSON陣列:

$files = !empty($_COOKIE['user']) ? json_decode($_COOKIE['user'], true) : array(); 
$files[] = $filename; 
setcookie('user', json_encode($files), time()+3600); 
+0

謝謝,我會稍後再試! – heyman 2012-04-01 03:38:17

2

您可以將每次上傳的餅乾,結尾的特殊字符像那樣「|」並在您編寫屏幕時分割。

$uploaded = isset($_COOKIE['uploaded']) ? $_COOKIE['uploaded'] : ''; 
setCookie('uploaded', $uploaded . '|' . $newFileName,time()+3600); 

// when showing 

$uploaded = explode('|', $_COOKIE['uploaded']); 

foreach ($uploaded as $file) { 
    if(empty($file)) continue; 
    echo $file . '<br/>'; 
} 
+0

謝謝你,它的工作! – heyman 2012-04-01 03:35:31

0

保存你的文件的名字到一個數組:

setcookie("cookie[".$i"."]", $filename); 

然後:

if (isset($_COOKIE['cookie'])) { 
    foreach ($_COOKIE['cookie'] as $name => $value) { 
    $number = htmlspecialchars($name); 
    $name = htmlspecialchars($value);   
    echo "File number $number : $value <br />\n"; 
    } 
    } 

,你會得到這樣的輸出:

You recently uploaded images: 
File 1: abc.zip 
File 2: def.zip 
File 3: ghi.zip 
+0

謝謝,我會稍後再試! – heyman 2012-04-01 03:37:00

0

你可以使用一個session 。我發現它比直接使用cookie更簡單。

//Start the session 
session_start(); 

//Save the uploaded filename 
$_SESSION["uploaded"][] = $filename; 

//Show uploaded files 
foreach($_SESSION["uploaded"] as $filename) 
{ 
    echo $filename."<br />"; 
}