当我在地址栏上输入时,我需要一个域example.com重定向到子域a.example.com。
<script type="text/javascript">
$(function(){
var city = readCookie('city');
if(city==null && city==''){
window.location.href = 'http://' + city + '.example.com';
}
$('#citygo').change(function(){
var city = $(this).val();
createCookie('city', city, 28);
window.location.href = 'http://' + city + '.example.com';
});
});
</script>
<body>
<select id="citygo">
<option value="0">Select City</option>
<option value="amsterdam">Amsterdam</option>
<option value="newyork">New York</option>
<option value="london">London</option>
<option value="cardiff">Cardiff</option>
</select>
</body>
服务器端的cookie未持有,因此域无法记住子域。我究竟做错了什么?任何帮助将非常感谢。
<?php
$hour = time() + 50400;
setcookie(My_Site_Location, $_POST['citygo'], $hour);
$Loc=$_COOKIE["city"];
if(isset($_POST['city']))
$Loc=$_POST['city'];
if (empty($Loc)) {
header("Location: http://{$_COOKIE["city"]}.example.com");
} else {
header("Location: example.com/$Loc.php");
}
?>
答案 0 :(得分:0)
默认情况下,setcookie()
会将当前主机用作域名;要覆盖它,您必须明确指定它:
setcookie(My_Site_Location, $_POST['citygo'], $hour, '/', 'example.com');
关于域值,manual说明了这一点:
仍旧实施已弃用的RFC 2109的旧版浏览器可能需要前导
.
才能匹配所有子域。
答案 1 :(得分:-1)
我遇到了同样的问题,但我在PHP中使用下面的代码解决了我的问题 您没有在cookie上设置路径和到期日。如果您有子目录,通常最好设置一个主路径为“/”的主cookie。
要使用PHP读取您的Cookie,请尝试此操作...
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
...并在数组中搜索“city”cookie。 有关使用完全PHP设置和阅读cookie的更多文档,请查看here.
在将任何其他代码回显到页面之前,您必须调用此函数。 (在标题之前)
这会对你有所帮助