1

我有一個可在本地服務器上運行的應用程序。證明可以在這裏找到:http://the-geographic-personality-project.org/inventoryapp/在Google App Engine中使用會話變量創建無限重定向

我推相同的文件到谷歌應用程序引擎在這個領域(http://inventoryapplication.appspot.com/),我也得到一個無限循環重定向錯誤。基本上,它是從index.php跳到sign_in.php,因爲我懷疑會話變量沒有被設置或保存在我的條件可以識別的地方,所以它們重定向。

這裏是重定向邏輯的index.php

<?php 
session_start(); 

if (isset($_SESSION['username']) && $_SESSION['permissions']==0) { 
    $_SESSION['logged_in_inventory_app_obnoxiously_long_name_to_avoid_collisions_with_other_sites'] = 1; 
    header('Location: ./admin/admin.php'); 
} else if (isset($_SESSION['username']) && $_SESSION['permissions']==1) { 
    $_SESSION['logged_in_inventory_app_obnoxiously_long_name_to_avoid_collisions_with_other_sites'] = 1; 
    header('Location: ./user/user.php'); 
} else { 
    $_SESSION['logged_in_inventory_app_obnoxiously_long_name_to_avoid_collisions_with_other_sites'] = 0; 
    unset($_SESSION['username']); 
    unset($_SESSION['password']); 
    unset($_SESSION['create_username']); 
    unset($_SESSION['create_password']); 
    unset($_SESSION['password_verify']); 
    header('Location: sign_in.php'); 
} 
?> 

這裏是重定向邏輯sign_in.php

<?php 
session_start(); 

// Check if user entered name and password 
if ((!empty($_POST["username"])) && (!empty($_POST["password"]))) { 
    //... 
    //authentification checks occur here if passed, the following variables are set 
    //... 

    $_SESSION['username'] = $username; 
    if ($_SESSION['username'] == "[email protected]") { 
     $_SESSION['permissions'] = 0; 
    } else { 
     $_SESSION['permissions'] = 1; 
    } 
    $_SESSION['logged_in_inventory_app_obnoxiously_long_name_to_avoid_collisions_with_other_sites'] = 1; 
    } 
} 
//echo '<pre>' . htmlspecialchars(print_r(get_defined_vars(), true)); 
//var_dump($_SESSION); 
if (isset($_SESSION['username']) && isset($_SESSION['logged_in_inventory_app_obnoxiously_long_name_to_avoid_collisions_with_other_sites'])) { 
    if ($_SESSION['logged_in_inventory_app_obnoxiously_long_name_to_avoid_collisions_with_other_sites'] == 1) { 
     echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">'; 
     exit; 
    } 
} 
?> 

記住它工作在一臺服務器上,但沒有在GAE上,所以這導致我相信這是一個配置問題,而不是編碼問題。如果我錯了,請謙卑我。

我不明白我需要重寫哪個會話php.ini配置設置。下面是爲GAE默認設置列表在這裏找到: https://developers.google.com/appengine/docs/php/#PHP_Directives_with_new_initialization_defaults

這是證明他們使用會話變量在內存緩存(不完全知道該怎樣承擔後果,我的設置),並得到定期刷新https://developers.google.com/appengine/docs/php/#PHP_Sessions

編輯::我忘了包括.yaml代碼,我承認我不知道TON,只是它指定了一個「歡迎文件」。我基本上只是重定向到index.php,它應該重定向到sign_in.php。這是下面的代碼:

application: ***name goes here*** 
version: 1 
runtime: php 
api_version: 1 
threadsafe: true 
handlers: 
- url: .* 
    script: main.php 

然後我main.php僅僅是一個簡單的(並且有點多餘)代碼:

<?php 
header('Location: index.php'); 
?> 
+0

考慮到sign_up.php永遠不會根據您的應用程序日誌進行訪問您確定您的app.yaml文件是正確的嗎? –

+0

我完全忘了談論我的.yaml文件。我不確定這是否正確,但我目前擁有的是以下內容(請參閱原始文章中的編輯,因爲在評論部分中的格式很糟糕)。 – areyoujokingme

+0

你完全錯了 –

回答

1

的app.yaml文件是完全錯誤的開始。

改變你的app.yaml到這樣的事情,看看你如何去。

application: ***name goes here*** 
version: 1 
runtime: php 
api_version: 1 
threadsafe: true 

handlers: 
- url: /(.+)\.php 
    script: \1.php 

- url: /.* 
    script: main.php 
+0

我不知道爲什麼,但它停止了重定向!如果您有任何資源可以讓我指點,以幫助我瞭解更多關於爲什麼在您的處理程序中添加代碼:部分在這裏工作?我很感激你的幫助,斯圖爾特!上週我真的很生氣啊! :-)感謝你! – areyoujokingme

+0

這裏應該涵蓋所有內容:https://developers.google.com/appengine/docs/php/config/appconfig –

相關問題