2011-12-17 10 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의 순서를 반전했지만 여전히 작동하지 않습니다.

휴대 기기에서 쿠키를 사용할 수 있습니까? 에 상관없이, 그것은 가정 어떤 클라이언트 모바일은없는 있도록

는 * 업데이트 *

나는 조건 전에 $type = 'mobile';을 추가했다. 그런 다음 랩톱의 Chrome을 사용하여 테스트했으며 쿠키가 확실히 활성화되었습니다. 모바일 버전 (ok)으로 이동하지만 switch을 클릭해도 여전히 정식 버전으로 이동하지 않습니다. 그래서 쿠키 자체의 문제입니다.

+0

쿠키는 기본적으로 금지되어 있지 않습니다. 모바일 브라우저가 현재 쿠키를 허용하지 않을 수 있으므로 쿠키를 사용하도록 설정하면됩니다. – Wesley

+0

'header ('Location : /index.php')와 같이 switch.php 헤더의 실제 경로를 사용하십시오. ' – Rufinus

+0

@Rufinus가 작동하지 않습니다. 'setcookie' 사용에 문제가 있습니까? – DrXCheng

답변

1

당신은 우리가

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

쿠키가 사용할 수있는 서버의 경로를 알 수 매뉴얼에서 쿠키

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

의 경로를 지정해야 . '/'로 설정하면 전체 도메인 내에서 쿠키를 사용할 수 있습니다. '/ foo /'로 설정하면 쿠키는/foo/디렉토리 및 도메인의/foo/bar /와 같은 모든 하위 디렉토리에서만 사용할 수 있습니다. 기본값은 쿠키를 설정하는 현재 디렉토리입니다. 당신의 예에서

경로 /m/에서 쿠키 설정합니다 스크립트 switch.php (기본값은 현재 디렉토리입니다). index.php은 쿠키 양식 /을 읽으려고 했으므로 리디렉션이 실패합니다.

관련 문제