我已经完成了我的表单,我知道如何使用PHP设置单个cookie但是设置cookie字符串的最佳格式是什么。我想要一个像这样的cookie(或类似的,我的格式只是一个例子);
偏好设置[主题=此&安培;布局=那]
我如何设置这样的cookie,然后从我的字符串中获取信息?
<?php
if (isset($_POST['submitted'])) {
$a = gmdate("M d Y H: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");
};
?>
答案 0 :(得分:3)
PHP允许您使用[]
中的setcookie()
表示法设置字符串值,您可以使用两个子键多次调用setcookie()
,Prefs
为$_COOKIE
这个名字。
从技术上讲,PHP会为数组元素设置多个cookie,但是当从// And set each in the cookie 'Prefs'
setcookie('Prefs[theme]', 'this' /*, $timeout, $path, $domain... */);
setcookie('Prefs[layout]', 'that' /*, $timeout, $path, $domain... */);
读回时,PHP将完全按照您期望的方式排列数组。
所以你可以把它设置为:
$_COOKIE['Prefs']
它可以作为print_r($_COOKIE['Prefs']);
// Array (
// [theme] => this,
// [layout] => that
// )
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('theme=this&layout=that', $prefs);
// $prefs is now as in the previous example. Proceed to set
// cookie values with the foreach loop...
开头,您可以先将其解析为数组using parse_str()
setcookie()
如果您决定以字符串格式存储Cookie,则可以将该字符串传递到parse_str()
,然后使用$_COOKIE
将其从// Set it as a string
setcookie('Prefs', 'theme=this&layout=that');
// And parse it from $_COOKIE into $prefs
parse_str($_COOKIE['Prefs'], $prefs);
中读回来。我不喜欢这种方法,我宁愿把cookie设置为上面的数组值。
setcookie()
{{1}}文档中的