使用 cookie 的 PHP 主题切换器

标签 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”显然未声明。

我是否遗漏了一些基本的东西?

最佳答案

该教程远没有希望,除了它对 XSS 漏洞开放这一事实之外,它甚至没有为您提供完整的工作代码!

试试这个尺寸...

索引.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?)。

关于使用 cookie 的 PHP 主题切换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24488101/

相关文章:

php - 如何在 URL 中实现 slug 替换 id

javascript - 制作 Disqus 2012 RTL

css - 使用 CSS 在导航栏上滑动(动画)bg 图像位置

authentication - 如何使用spring security在grails中获取所有当前登录用户的列表(包括rememberme cookie)

php - 通过 php 读取二进制文件并通过 shell 上的 exec 保存它

php - 如何截取整个桌面?

php - 按值拆分数组

html - Firefox、Edge 和 IE 中的 Flexbox column-reverse

c# - 在 WebResourceRequested 事件中为 WebView2 设置 cookie

c# - 向Web服务端口客户端添加cookie