2014-10-30 78 views
0

我有一個奇怪的問題,因爲某些未知的原因,我的$ _SESSION ['last_uri']變量正在修改js重定向。PHP會話修改重定向

這是我們定義會話變量,它當前顯示爲「/ training_management」:

echo 'SESSION: ' . $_SESSION['last_uri']; 

if (!(preg_match('/login/', $_SERVER['SCRIPT_NAME'])) && !(preg_match('/denied/',  $_SERVER['SCRIPT_NAME']))) { 
    $_SESSION['last_uri'] = $_SERVER['REQUEST_URI']; 

這是我們重定向到一個新的頁面:

$("#login_button").click(function() { 
    var name = $("input[name$=name]").val(); 
    var pw = encodeURIComponent($("input[name$=password]").val()); 
    var query = "func=login&name=" + name + "&password=" + pw; 
    ajaxRequest(query, function(data) { 
     console.log(data); 
     data = data.replace(/(\r\n|\n|\r|\s)/gm, ""); 
     if (!data || data == 0) { 
      failureMsg(_("Incorrect login data.")); 
     } else { 
      window.location.replace("redirect"); 
     } 
    }); 
}); 

這然後重定向到redirect.php,其值爲'/tpl/css/images/ui-icons_222222_256x240.png':

if ($_SESSION['last_uri']) { 
    echo $_SESSION['last_uri']; 

    //header("Location: " . $_SESSION['last_uri']); 
} 

SESSSION變量在哪裏/如何改變?

這裏是我的重寫規則:

# No www 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 

# No likey .php 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

# Some more Security 
RewriteEngine On 
RewriteCond %{QUERY_STRING} proc/self/environ [OR] 
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] 
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR] 
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR] 
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2}) 
RewriteRule ^(.*)$ /security [R=301,L] 
+0

你使用的是網址重寫嗎?它看起來像你重寫了太多。 – jeroen 2014-10-30 16:58:34

+1

如果你有mod_rewrite將你所有的請求重寫到一個PHP腳本,那麼點擊一個特定的頁面可能會觸發一大堆重寫:一個用於實際頁面,另外一個用於該頁面上每個外部資源的附加內容(例如圖像,CSS,JS)。 – 2014-10-30 16:59:41

+0

添加重寫規則以發佈 – morissette 2014-10-30 17:01:43

回答

1

這可能是發生了什麼(見註釋):

echo 'SESSION: ' . $_SESSION['last_uri']; // display /training_management 

if (!(preg_match('/login/', $_SERVER['SCRIPT_NAME'])) && !(preg_match('/denied/',  $_SERVER['SCRIPT_NAME']))) { 
    $_SESSION['last_uri'] = $_SERVER['REQUEST_URI']; 
    echo 'NEW SESSION: ' . $_SESSION['last_uri']; // display /tpl/css/images/ui-icons_222222_256x240.png 
} 

其他可能性:

  • /TPL/CSS /圖像/未找到ui-icons_222222_256x240.png重定向到修改會話的PHP頁面。
  • session_start()缺失。
+0

redirect.php不會加載header.php,其中包含$ _SESSION ['last_uri']的定義 – morissette 2014-10-30 17:00:26

+0

是的,但是您在變量設置之前使用echo測試變量,以便您的測試可能是錯誤的。 – KyleK 2014-10-30 17:08:35

+0

tail session_log last_uri | s:53:「/ tpl/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png」; last_uri | s:43:「/ tpl/css/images/ui-icons_222222_256x240.png」; last_uri | s:20:「/ training_management」; last_uri | s:20:「/ training_management」; last_uri | s:53:「/ tpl/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png」; last_uri | s:43:「/ tpl/css/images/ui-icons_222222_256x240.png」; last_uri | s:43:「/ tpl/css/images/ui-icons_222222_256x240.png」; username | s:13:「matthewharris」; logged_in | i:1; auditor_id | s:4:「3042」; access_level | S:1: 「6」; – morissette 2014-10-30 17:14:01