我有一個可在本地服務器上運行的應用程序。證明可以在這裏找到: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');
?>
考慮到sign_up.php永遠不會根據您的應用程序日誌進行訪問您確定您的app.yaml文件是正確的嗎? –
我完全忘了談論我的.yaml文件。我不確定這是否正確,但我目前擁有的是以下內容(請參閱原始文章中的編輯,因爲在評論部分中的格式很糟糕)。 – areyoujokingme
你完全錯了 –