2016-11-22 44 views
-1

我寫了一個php代碼。地址欄神祕地起作用。任何人都可以解釋發生了什麼。爲什麼php header()如果頁面被添加書籤,這很奇怪?

的index.php

<?php 
/* Notes: 
* $_COOKIE['user_id'] is set and alive 
* $_SESSION['user_id'] does not exist 
* session_start() is given already 
*/ 
... 
session_start(); 

if(!isset($_SESSION['user_id') && isset($_COOKIE['user_id'])) { 
    $location = 'Location:http://localhost/project/login.php'; 
    header($location); 
} 
?> 

在地址欄中鍵入我 「本地主機/項目/ index.php文件」。它工作正常。

我收藏了「localhost/project/index.php」,這次我使用書籤去index.php。我希望被重定向到「本地主機/項目/ login.php中」

但是瀏覽器重定向我爲「localhost /項目/工程/ login.php中」

任何人都可以解釋這種現象給我嗎?

感謝

+0

這是你的完整的腳本?你有重寫規則嗎?你有沒有註釋掉'header'來確認你輸入這個條件? – chris85

+0

嗨Chris85, 問題是從這個if()語句。正如我所提到的,$ _SESSION ['user_id']死亡。 $ _COOKIE ['user_id']仍然存在,它仍然存在。 評論標題是什麼意思? – user7175892

+0

'/ * header($ location); */die(「we're conditioning」);' – chris85

回答

0

chris85, 感謝您的答覆。 我發現了這個問題。這是一個簡單的編碼錯誤,不幸的是花了很長時間才發現。

這是我的實際代碼是如何:

<?php 
define('HOST',"http://{$_SERVER['HTTP_HOST']}/project"); 

session_start(); 

if(!isset($_SESSION['user_id') && isset($_COOKIE['user_id'])) { 
    $location = 'Location:'.HOST.$_SERVER['PHP_SELF']; 
    header($location); 
    exit(); 
} 
?> 

不幸的是,錯誤,我添加$ _ SERVER [「PHP_SELF」]我曾經在$位置被分配該項目並沒有在所有的想起來了將重複:

<?php 
echo $location; 
/*Output: http://localhost/project*/ 
?> 

通過消除$ _ SERVER [ 'PHP_SELF']的問題就迎刃而解了:

<?php 
echo $location; 
/*Output: http://localhost/project/project/index.php*/ 
?> 
+0

快速提示:隨時退出標題(位置)調用,否則腳本將繼續執行,即使您不願意沒有看到它。這可能會造成安全問題或模糊的錯誤。 – Erik

+0

謝謝埃裏克。我只是沒有做這個代碼,因爲頭後沒有任何東西。 :) 但爲了避免混淆,我會編輯它。 – user7175892

相關問題