2011-12-17 16 views
1

私のサイトには完全版とモバイル版があります。 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を使用してテストしました。クッキーは確実に有効になっています。モバイル版(ok)ですが、switchをクリックしても完全版にはなりません。クッキー自体の問題です。

+0

デフォルトではCookieは禁止されていません。モバイルブラウザが現在のところCookieを受け入れていない可能性があります。これを有効にすることができます。 – Wesley

+0

'header( 'Location:/index.php');' – Rufinus

+0

のようにswitch.phpヘッダの実際のパスを使用してください。 'setcookie'の使用に何か問題はありますか? – DrXCheng

答えて

1

あなたは私たちが

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

クッキーが上で利用できるようになるには、サーバー上のパスを知ることができ、マニュアルからクッキー

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

のパスを指定する必要があります。 '/'に設定すると、クッキーはドメイン全体で利用可能になります。 '/ foo /'に設定すると、cookieは/ foo /ディレクトリとドメインの/ foo/bar /などのすべてのサブディレクトリでのみ使用できます。デフォルト値は、クッキーがセットされたときのカレントディレクトリです。あなたの例では

パス/m/でクッキーを設定するスクリプトswitch.php(デフォルト値は現在のディレクトリです)。 index.phpがクッキーフォーム/を読み込もうとしていたため、リダイレクトは失敗します。

関連する問題