2016-08-23 175 views
0

我在Chrome上遇到cookie問題。 我在php中使用setcookie()函數來自動重新驗證已經通過驗證過程(使用LinkedIn API)的用戶。Cookie不會在Chrome上獲取正確的值

問題是,我設置的cookie在Firefox 11上工作正常,但似乎在Chrome上幾秒後就會被刪除。我已經測試了一堆用戶,他們面臨同樣的問題(我正在等待其他瀏覽器的反饋)。

下面是設置的Cookie代碼:

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

它是一個已知的問題?我該如何解決這個問題?

編輯5:

我換了個話題的標題,因爲我完全回顧我的做法。 (我也刪除了以前的編輯,因爲它們無關緊要) 我現在使用openssl_random_pseudo_bytes()函數生成唯一ID,而不是使用LinkedIn ID作爲我的cookie的值。 這是新代碼:

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

所以,現在,Chrome瀏覽器創建一個隨機值一個cookie,如問,cookie過期時間是正確的。不過,這不是正確的價值!我在控制檯中回顯$UserKey,它與cookie有不同的值。但在FF和IE上它的功能就像一個魅力! 響應標題給我提供了我的cookie的錯誤值,但請求標題有正確的值。

有人有任何經驗嗎?問題來自我的代碼或我正在使用的函數嗎?

+0

你有沒有嘗試把計算放在一個單獨的變量中,比如$ expire = time()+ 31536000? 'setcookie('CookieID',$ var,(time()+ $ expire),NULL,NULL,false,true);' –

+0

我剛試過這個,同樣的問題。試過'$ expiration = time()+ 31536000'和'$ expiration = 31536000' –

+0

這個問題很簡單 - 在PHP中''var''沒有設置**,不管你怎麼說。如果是,價值將被髮送。你甚至想出了一個證明它的測試。唯一的另一種可能性是'$ var'包含混淆了cookie解析的值,這就是爲什麼您發送的值應該被編碼的原因。 – Mjh

回答

1

下面的代碼對我的作品在Chrome版本52 東西在Linux上:

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

下面是結果:Cookie test in Chrome

我只能假設你是不是沒有設置正確$var或在渲染頁面之前不設置$varsetcookie()header函數,並且必須在渲染頁面之前調用該函數)。

你在做與上面的代碼不同的東西嗎?

+0

'$ var ='SomeString'; /* SET COOKIE */ \t \t \t \t \t $ expiration = time()+ 365 * 24 * 3600; \t \t \t \t \t setcookie('CookieID',$ var,$ expiration,NULL,NULL,false,false); \t \t \t \t \t/************ /' 這是我的代碼。我以爲你喜歡你,我已經設置了$ var錯誤,但既然它在FF和IE上工作,甚至在Chrome上我得到的輸出$ var的價值,我不明白爲什麼這不應該工作時,我設置cookie。 –

+0

您是否在Chrome中運行任何擴展程序?也許你在_Incognito_模式下運行Chrome?在_Settings - >高級 - >隱私 - >內容設置 - > Cookies_下,您是否設置了任何「例外」? – Tigger

+0

沒有例外,沒有隱身。我正在運行一個montior cookies的擴展,但我刪除了它。其實有我想到的東西。 我從CURL HTTP請求中獲取$ var的值,該請求在設置cookie之前被調用並關閉。由於它在其他瀏覽器上工作,所以我沒有費心去研究這個問題,但由於問題似乎來自於我給予$ var的價值,也許Chrome會以導致問題的方式處理請求? 此外,如果我查看請求標頭,Cookie值是正確的。它在響應標題中顯示爲已刪除。 –