基于处理我在此处找到的信息Validate cookie matches a list of hard-coded values以及OP的原始问题,我已经有了一个基本的主题切换器工作。
CSS-swap.php
<?php
$required = array('black', 'green', 'pink', 'red');
$style_name = 'black';
if(!empty($_COOKIE['style']) && in_array( $_COOKIE['style'] , $required ))
$style_name = $_COOKIE['style'];
?>
<link rel="stylesheet" type="text/css" href="css/<?php echo (!isset($_COOKIE['style'])?$style_name:$_COOKIE['style']) ?>.css" />
</head>
<body>
<form action="process-css-swap.php" method="get">
<select name="choice">
<option value="black" selected>Black</option>
<option value="green">Green</option>
<option value="pink">Pink</option>
<option value="red">Red</option>
</select>
<input type="submit" value="Apply">
</form>
过程-CSS-swap.php
<?php
$year = 31536000 + time();
setcookie('style', $_GET['choice'], $year);
header('Location: css-swap.php');
exit();
?>
我不确定我是否正确解释了验证部分,特别是在我添加了两个不在所需数组中的选项时,主题会更改为这些选项的样式。
<option value="blue">Blue</option>
<option value="purple">Purple</option>
我还尝试使用GET
代替POST
,因为我希望能够为选择添加书签,但选项不会显示在网址中。
那么,我是否错误地验证了cookie?为什么它似乎像POST
而不是GET
处理?