2013-11-27 189 views
0

我剛開始使用PHP的谷歌應用程序引擎的項目。PHP谷歌App Engine與SESSION,COOKIES

很奇怪的東西出現今天..

簡單代碼:

session_start(); 
if ($_COOKIE['test'] == 1) { 
    setcookie('test', 2); 
} elseif ($_COOKIE['test'] == 2) { 
    setcookie('test', 3); 
} elseif ($_COOKIE['test'] == 3) { 
    setcookie('test', 4); 
} elseif ($_COOKIE['test'] == 4) { 
    setcookie('test', 1); 
} 



echo $_COOKIE['test']; 
exit; 

其中在本地機器上的工作原理是: 1 - >刷新 - > 2 - >刷新 - > 3 - >刷新 - > 4 - >刷新 - > 1等等...

但在谷歌應用程序引擎它的工作原理是: 2 - >刷新 - > 4 - >刷新 - > 2 - >刷新 - > 4。 ... 等等。

有了這個代碼

<?php 
session_start(); 
if($_SESSION['test'] == 1){ 
    $_SESSION['test'] = 2; 
}else{ 
    $_SESSION['test'] = 1; 
} 



echo $_SESSION['test'];exit; 
?> 

在本地服務器上,我得到 - > 1 - > 2 - > 1 - > 2 .... 在谷歌應用程序引擎我得到 - > 2 - > 2 - > 2 ....

像總是刷新兩次。

使用$ _POST和$ _GET,我沒有任何問題。

<?php $post = $_POST['test']; 
$post = $post + 1; 
?> 
<form action="" method="POST"> 
    <input type="text" name="test" value="<?= $post ?>"> 
    <input type="submit"> 
</form> 

始終得到+1

我真的很困惑...... 試圖在本地機器上使用Python 2.7,也是谷歌應用程序引擎的服務器上...

+0

你測試了==='1'(即實際上是一個字符串)嗎? – Cups

+0

同樣的故事... 但是,如果我真的很快按刷新按鈕2次刷新3次,而不是4 ... 如果我開始點擊真的很快..那麼它的工作就像它應該.. –

+0

只需找出問題是隻有谷歌chrome ... 在IE,Opera,Firefox上絕對沒有問題! –

回答

0

我會檢查你的php.ini variables_order =「GPCS」。 我在Google App Engine的本地開發和生產環境中測試了您的代碼位,它們的行爲都相同,循環1,2,3,4用於Cookie,1,2用於會話。

但是我稍微修改了你的代碼,因爲你不必首先啓動會話來使用cookie,但是如果你的代碼是「if」條件,你必須先設置第一個cookie setcookie('測試',1),因爲它在啓動腳本時並不存在。

牢記$ _COOKIE不會閱讀的價值在安裝與setCookie方法,直到下一次刷新頁面下面有我的測試腳本:

<?php 
if (!isset($_COOKIE['test']) || !in_array($_COOKIE['test'], array(1,2,3,4))) { 
    setcookie('test', 1); 
} elseif ($_COOKIE['test'] == 1) { 
    setcookie('test', 2); 
} elseif ($_COOKIE['test'] == 2) { 
    setcookie('test', 3); 
} elseif ($_COOKIE['test'] == 3) { 
    setcookie('test', 4); 
} elseif ($_COOKIE['test'] == 4) { 
    setcookie('test', 1); 
} 

session_start(); 

if($_SESSION['test'] == 1) { 
    $_SESSION['test'] = 2; 
}else{ 
    $_SESSION['test'] = 1; 
} 

printf("cookie: %s <br>\n session: %s <br>\n", $_COOKIE['test'], $_SESSION['test']); 
exit; 
+0

同樣的故事...... 迴歸 - 餅乾:3 會議:2 刷新 餅乾:1 會議:2 刷新 餅乾:3 會議:2 –

+0

也許嘗試從我們可以谷歌應用程序引擎收錄你的phpinfo()比較。你也可能想要檢查頭部請求響應的代碼,看看究竟發生了什麼。 Chrome和Firefox具有良好的調試開發者控制檯。 – mal

1

我必須承認,這是一個棘手的一個。

我不會責怪Chrome的這個bug,但我相信App Engine的php-sdk的創建者應該提供有關其路由邏輯的更清晰的文檔。

發生這種情況是因爲Chrome試圖加載favicon.ico,並且默認情況下App Engine會將此文件路由到您的主頁,因此您最終無法意識到它會運行您的主頁兩次。

解決的辦法是把它添加到您的app.yaml文件:

- url: /favicon\.ico 
    static_files: static/images/favicon.ico 
    upload: static/images/favicon\.ico 

即使你實際上並沒有一個圖標,這是更好地得到404的圖標,而不是重新加載主頁。