我的网站有完整版和移动版。键入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: ../');
?>
我也改变了setcookie
和header
的顺序,但仍然不起作用。
移动设备中是否可以禁止cookie?
*更新*
我在条件之前添加了$type = 'mobile';
,因此无论客户端是什么,都假定它是移动的。然后我使用笔记本电脑上的Chrome进行测试,并确保启用了Cookie。它转到移动版本(确定),但点击switch
仍然没有转到完整版。所以这是cookie本身的问题。
答案 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格式/
,因此重定向将失败。