Я получил свою форму, и я знаю, как установить сингулярный файл 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()
.