2016-08-23 4 views
0

Chrome에 쿠키 문제가 있습니다. PHP에서 setcookie() 함수를 사용하여 이미 인증 프로세스 (LinkedIn API 사용)를 거친 사용자를 자동으로 다시 인증합니다.쿠키가 Chrome에서 올바른 값을 가져 오지 않습니다.

문제는 내가 설정 한 쿠키가 IE 11에서 Firefox에서 제대로 작동하지만 크롬에서 몇 초 후에 삭제되는 것 같습니다. 나는 그들을 (다른 브라우저에 대한 피드백을 기다리고있다.) 많은 사람들과 똑같은 문제로 테스트했다.

setcookie('CookieID', $var, (time()+365*24*3600), NULL, NULL, false, true); 
setcookie('LinkedInAuth', $var, (time()+365*24*3600), NULL, NULL, false, true); 

이 알려진 문제입니다 : 여기

는 쿠키를 설정하는 코드이다? 이 문제를 어떻게 해결할 수 있습니까?

편집 5 : 나는 완전히 내 접근 방식을 재검토로

나는 항목의 제목을 변경했습니다. (이전 편집 내용은 관련성이 없어서 삭제했습니다.) 내 쿠키의 값으로 LinkedIn ID를 사용하는 대신 openssl_random_pseudo_bytes() 함수를 사용하여 고유 ID를 생성합니다. 질문으로,

$random = openssl_random_pseudo_bytes(32); 
$UserKey = bin2hex($random); 
$expiration= time() + 365*24*3600; 
setcookie('CookieID', $UserKey, $expiration, NULL, NULL, false, false); 

그래서 지금, 크롬 임의의 값으로 쿠키를 생성하고, 쿠키 만료 시간은 맞다 : 다음은 새로운 코드입니다. 여전히 정확한 값은 아닙니다! 콘솔에 $UserKey을 표시하고 쿠키와 다른 값을 갖습니다. 그러나 FF와 IE에서는 매력처럼 작동합니다! 응답 헤더가 내 쿠키에 잘못된 값을 제공하지만 요청 헤더에 올바른 값이 있습니다.

누군가 그 경험이 있습니까? 문제가 내 코드 또는 내가 사용하는 기능에서 발생합니까?

+0

$ expire = time() + 31536000 같은 분리 된 변수에 계산을 넣으려고 했습니까? 'setcookie ('CookieID', $ var, (time() + $ expire), NULL, NULL, false, true); –

+0

방금 ​​같은 문제가 발생했습니다. '$ expiration = time() + 31536000'과'$ expiration = 31536000'으로 시도했습니다. –

+0

문제는 간단합니다. - 당신이 말하는 것에 상관없이,'$ var'는 PHP에서 ** 설정되지 않았습니다 **. 그럴 경우 값이 전송됩니다. 당신은 심지어 그것을 입증하는 시험을 생각해 냈습니다. 유일한 다른 가능성은'$ var'가 쿠키 파싱을 엉망으로 만드는 값을 포함한다는 것입니다. 그래서 여러분이 보낸 값을 인코딩해야합니다. – Mjh

답변

1

다음 코드는 리눅스에 크롬 버전에 나를 위해 52 뭔가 작동 : Cookie test in Chrome

난 단지 당신도 제대로 $var을 설정하거나하지 않는 가정 할 수있다 : 여기

$var = '1234567890'; 
setcookie('CookieID', 'CK'.$var, (time()+365*24*3600), NULL, NULL, false, true); 
echo 'Cookie "CookieID" should be set to "CK'.$var.'"'; 
exit; 

가 결과입니다 페이지의 렌더링 전에 $var을 설정하지 마십시오 ( setcookie()header 기능이므로 페이지를 렌더링하기 전에 호출해야합니다).

위 코드와 다른 것을하고 있습니까?

+0

'$ var = 'SomeString'; /* SET COOKIE */ \t \t \t \t \t $ 만료 = 시간() + 365 * 24 * 3600; \t \t \t \t \t setcookie ('CookieID', $ var, $ 만료, NULL, NULL, NULL, 거짓, 거짓); \t \t \t \t \t/************ /' 이 내 코드입니다. 나는 $ var를 잘못 설정했다고 생각했지만, FF와 IE에서 작동하고 심지어 Chrome에서도 $ var의 값을 출력합니다. 쿠키를 설정할 때 이것이 작동하지 않아야하는 이유가 없습니다. –

+0

Chrome에서 확장 프로그램을 실행하고 있습니까? _Incognito_ 모드에서 Chrome을 실행하고 있습니까? _Settings -> Advance -> Privacy -> Content Settings -> Cookies_에서 '예외'가 설정되어 있습니까? – Tigger

+0

예외 없음, 시크릿 없음. 나는 montior 쿠키에 대한 확장 프로그램을 실행하고 있었지만 삭제했습니다. 사실 제가 생각한 것이 있습니다. CURL HTTP 요청에서 $ var의 값을 얻습니다. CURL HTTP 요청은 쿠키를 설정하기 전에 호출되고 닫힙니다. 나는 다른 브라우저에서 작동하기 때문에이 문제를 조사하기가 번거롭지는 않지만 문제는 $ var에 제공 한 값에서 비롯된 것 같기 때문에 Chrome은 문제를 일으키는 방식으로 요청을 처리하고 있습니까? 또한 요청 헤더를 보면 쿠키 값이 올바른 것입니다. 응답 헤더에 삭제 된 것으로 표시됩니다. –