2013-08-05 3 views
2

방금 ​​코드에 임의의 테스트를 실행했으며 get_browser()이 Google 크롬으로 Opera를 읽는 것을 발견했습니다.php get_browser가 이제 Opera를 Chrome으로 읽는 중입니까?

몇 달 전 get_browser()는 5 개의 브라우저 (크롬, 즉 ff, 오페라, 사파리) 모두에서 올바른 결과를 얻었습니다.

오늘 Opera는 Chrome에서 동일한 값을 표시했습니다. 먼저 get_browser()가 문제가되어야한다고 생각하여 대안을 얻으려고 시도했습니다. 이 javascript alternative이 작동하지만 get_browser처럼 Opera에서 Google 크롬도 감지했습니다.

Google 데스크톱 브라우저에서 Chromium을 사용하여 Opera에 대한 빠른 검색을 수행했습니다.

내 코드가 Opera와 Chrome에 동일한 값을 부여하는 이유는 무엇입니까?

사용자 경험을 향상시키기 위해 사용자 정보를 저장하며, 사용자에게 잘못된 정보가 전달되면 나 빠진다.

Google 크롬과 Opera의 개성을 유지하는 방법에 대한 아이디어가 있으십니까?

내가 생각할 수있는 것은 사용자 에이전트를 사용하고 있지만 가짜 일 수 있습니다.

답변

2

오페라는 이제 Chromium/Blink를 기본으로 사용합니다. 호환성 문제를 해결하기 위해 그들은 의도적으로 use Chrome's user-agent입니다. 위에서 볼 수 있듯이 오페라 사용자 에이전트의 버전을 추가로

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100 

그러나, 오페라와 크롬의 차별화는 여전히 가능 : 다음은 오페라 제시 UA 문자열의 예입니다.

PHP의 get_browser() 함수를 계속 사용하려면 Opera의 기본 감지 기능을 구현하는 PHP의 최신 버전을 기다려야합니다. 그러나 해당 작업을 수행하는 함수를 작성할 수도 있습니다. 실제로 get_browser()는 HTTP 요청 헤더의 사용자 에이전트 필드를 디코딩하여 작동합니다.

+0

예전에 사용 도구의 차이점을 보았습니다. 빠른 대안으로 'UA'에서 'OPR'을 검색하는 데 'strpos'를 사용했습니다. 그것이 내가 지금 생각할 수있는 유일한 대안이다. 그러나 이것에 대해 다른 접근법을 기대하고있었습니다. 링크 +1 –