PHP主题切换器使用cookie

时间:2014-06-30 10:32:07

标签: php css cookies

我想要一种简单的方法来更新我的网站CSS以获得更广泛的可访问性。

我发现了这个看起来很有希望:http://php.about.com/od/finishedphp1/ss/css_switcher.htm

这是它推荐的PHP代码:

的index.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Theme Test</title>
<link rel="stylesheet" type="text/css" href="<?php echo (!$style)?'normal':$style ?>.css" />
</head>

<body>

 <form action="changestyle.php" method="post">
 <select name="choice">
 <option value="classic" selected>Classic View</option>
 <option value="holiday">Holiday View</option>
 <option value="normal">Normal View</option>
 </select>
 <input type="submit" value="Go">
 </form>

</body>
</html>

changestyle.php

<?php 
 $Year =31536000 + time();
 setcookie ('style', $choice, $year);
 header("Location: $HTTP_REFERER"); 
 ?>

然而,由于样式表变量'style'显然未声明,因此失败。

我错过了一些基本的东西吗?

1 个答案:

答案 0 :(得分:2)

该教程远非充满希望,除了它对XSS漏洞开放之外它甚至不能为您提供完整的工作代码!

试试这个尺寸......

的index.php

<link rel="stylesheet" type="text/css" href="<?php echo (!isset($_COOKIE['style'])?'normal':$_COOKIE['style']) ?>.css" />

changestyle.php

<?php
$year = 31536000 + time();
setcookie('style', $_POST['choice'], $year);
header('Location: index.php');
exit();

这不会解决您的XSS问题(即有人更改“选择”的值以在您的网页上插入令人讨厌的代码),但至少应该让它正常工作。

作为参考,我会检查index.php以检查cookie是否与硬编码值列表匹配,而不是只是回显出值,因为任何人都可以更改它(参见What is Cross Site Scripting and How Can You Fix it?)。 / p>