PHP Set и чтение строки cookie

Я получил свою форму, и я знаю, как установить сингулярный файл cookie с помощью PHP, но какой лучший формат для установки строки cookie. Я хотел бы иметь такой файл cookie (или аналогичный, мое форматирование – всего лишь пример);

Prefs [тема = это и раскладка = что]

Как я могу установить такой файл cookie, а затем получить информацию из моей строки?

Код до сих пор:

<?php if (isset($_POST['submitted'])) { $a = gmdate("M d YH:i:s"); $b = "Cookies=true&Cookies_Accepted=" . $a . ""; $c = $_POST["APT_SELECTED"]; $d = $_POST["APPT_SELECTED"]; if ($d == 'Custom') { $d = $c; }; $e = $_POST["APL_SELECTED"]; $f = $_POST["APTNP_SELECTED"]; $g = $_POST["APSNP_SELECTED"]; $h = $_POST["APSNM_SELECTED"]; $i = $_POST["ScreenTimeout"]; $j = time() + (10 * 365 * 24 * 60 * 60); $k = "/admin/"; $l = "rafflebananza.com"; $m = array( 'APCA' => 'true', 'APCAW' => $a, 'APT' => $c, 'APPT' => $d, 'APL' => $e, 'APTNP' => $f, 'APSNP' => $g, 'APSNM' => $h, 'APLSA' => $i ); foreach ($m as $n => $o) { setcookie("RBAP_Prefs[$n]", $o, $j, $k, $l); }; header("Location: http://admin.rafflebananza.com/incex.php"); }; ?> 

PHP позволит вам установить строковые значения с помощью [] нотации в setcookie() , вы можете сделать несколько вызовов setcookie() с двумя вашими под-ключами и Prefs в качестве имени.

Технически PHP будет устанавливать несколько файлов cookie для элементов массива, но при чтении из $_COOKIE PHP устроит его точно так же, как вы ожидали бы прочитать массив.

Таким образом, вы можете установить его как:

 // And set each in the cookie 'Prefs' setcookie('Prefs[theme]', 'this' /*, $timeout, $path, $domain... */); setcookie('Prefs[layout]', 'that' /*, $timeout, $path, $domain... */); 

И он будет $_COOKIE['Prefs'] чтения в виде массива в $_COOKIE['Prefs']

 print_r($_COOKIE['Prefs']); // Array ( // [theme] => this, // [layout] => that // ) 

Вместо того, чтобы вручную называть setcookie() для каждого из них, вы можете setcookie() существующий массив. Это удобно, если у вас есть только один уровень гнездования.

 // Define your array $prefs = array('theme' => 'this', 'layout' => 'that'); // Loop to create keys foreach ($prefs as $key => $value) { setcookie("Prefs[$key]", $value, $timeout, $path, $domain); } 

Если по какой-то причине вы должны начать с строки строки запроса и строки с разделителями, например theme=this&layout=that , вы можете сначала проанализировать ее в массиве с помощью parse_str() .

 parse_str('theme=this&layout=that', $prefs); // $prefs is now as in the previous example. Proceed to set // cookie values with the foreach loop... 

Если вы решите, что хотите сохранить файл cookie в строковом формате, вы можете передать эту строку в setcookie() а затем использовать parse_str() чтобы прочитать его обратно из $_COOKIE . Мне не нравится этот метод, хотя я бы предпочел увидеть, что cookie установлен как значения массива выше.

 // Set it as a string setcookie('Prefs', 'theme=this&layout=that'); // And parse it from $_COOKIE into $prefs parse_str($_COOKIE['Prefs'], $prefs); 

Дополнительные примеры доступны в документации setcookie() .