php设置cookie重定向

时间:2013-12-05 04:23:12

标签: php redirect cookies

当我在地址栏上输入时,我需要一个域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");  
} 
?>

2 个答案:

答案 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.

在将任何其他代码回显到页面之前,您必须调用此函数。 (在标题之前)

这会对你有所帮助