为什么这个cookie不起作用?

时间:2011-12-17 00:15:19

标签: php cookies mobile

我的网站有完整版和移动版。键入URL时,index.php将检测用户的客户端以指向完整版或移动版。这很好用。桌面客户端的用户也可以切换到移动版。但是我从移动客户端切换到完整版本的用户遇到了麻烦。代码在这里:

// index.php
<?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('...',substr($useragent,0,4))) {
  $type = 'mobile';
} else {
  $type = 'full';
}
if ($type == 'mobile' and $_COOKIE['switch'] != 'full') {
  header ('Location: m/');
} else {
  include './front.html.php';
}
?>

// m/switch.php  page when user click
<?php
setcookie('switch', 'full', time() + 60);
header('Location: ../');
?>

我也改变了setcookieheader的顺序,但仍然不起作用。

移动设备中是否可以禁止cookie?

*更新*

我在条件之前添加了$type = 'mobile';,因此无论客户端是什么,都假定它是移动的。然后我使用笔记本电脑上的Chrome进行测试,并确保启用了Cookie。它转到移动版本(确定),但点击switch仍然没有转到完整版。所以这是cookie本身的问题。

1 个答案:

答案 0 :(得分:1)

您需要指定Cookie的路径

setcookie('switch', 'full', time() + 60, '/');

从手册我们可以知道

http://php.net/manual/en/function.setcookie.php

  

可在其上使用cookie的服务器上的路径。如果设置为“/”,则cookie将在整个域中可用。如果设置为'/ foo /',则cookie只能在/ foo /目录和所有子目录中使用,例如/ foo / bar / of domain。默认值是设置cookie的当前目录。

在您的示例中,脚本switch.php将在路径/m/中设置cookie(默认值为当前目录)。 但是,您的index.php尝试读取Cookie格式/,因此重定向将失败。