Ignore:
Timestamp:
2011/01/13 16:23:02 (13 years ago)
Author:
Seasoft
Message:

#714(パス指定によるリダイレクトの記述を簡潔にする)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/SC_Response.php

    r19834 r19908  
    132132 
    133133    /** 
    134      * @param string $location 「url-path」「現在のURLからのパス」「URL」のいずれか 
     134     * アプリケーション内でリダイレクトする 
     135     * 
     136     * @param string $location 「url-path」「現在のURLからのパス」「URL」のいずれか。「../」の解釈は行なわない。 
    135137     * @return void 
    136138     * @static 
     
    171173        } 
    172174 
    173         // アプリケーション内での遷移時の処理 
    174175        $pattern = '/^(' . preg_quote(HTTP_URL, '/') . '|' . preg_quote(HTTPS_URL, '/') . ')/'; 
    175         if (preg_match($pattern, $url)) { 
    176             $netUrl = new Net_URL($url); 
    177             $arrQueryString = array_merge($netUrl->querystring, $arrQueryString); 
    178             $netUrl->querystring = array(); 
    179  
    180             if ($inheritQueryString) { 
    181                 if (!empty($_SERVER['QUERY_STRING'])) { 
    182                     $netUrl->addRawQueryString($_SERVER['QUERY_STRING']); 
    183                 } 
     176 
     177        // アプリケーション外へのリダイレクトは扱わない 
     178        if (preg_match($pattern, $url) === 0) { 
     179            SC_Utils_Ex::sfDispException(); 
     180        } 
     181 
     182        $netUrl = new Net_URL($url); 
     183        $arrQueryString = array_merge($netUrl->querystring, $arrQueryString); 
     184        $netUrl->querystring = array(); 
     185 
     186        if ($inheritQueryString) { 
     187            if (!empty($_SERVER['QUERY_STRING'])) { 
     188                $netUrl->addRawQueryString($_SERVER['QUERY_STRING']); 
    184189            } 
    185  
    186             foreach ($arrQueryString as $key => $val) { 
    187                 $netUrl->addQueryString($key, $val); 
    188             } 
    189  
    190             $url = $netUrl->getURL(); 
    191  
    192             $session = SC_SessionFactory::getInstance(); 
    193             if (SC_MobileUserAgent::isMobile() || $session->useCookie() == false) { 
    194                 $netUrl->addQueryString(session_name(), session_id()); 
    195             } 
    196  
    197             $netUrl->addQueryString(TRANSACTION_ID_NAME, SC_Helper_Session_Ex::getToken()); 
    198             $url = $netUrl->getURL(); 
    199         } 
     190        } 
     191 
     192        foreach ($arrQueryString as $key => $val) { 
     193            $netUrl->addQueryString($key, $val); 
     194        } 
     195 
     196        $url = $netUrl->getURL(); 
     197 
     198        $session = SC_SessionFactory::getInstance(); 
     199        if (SC_MobileUserAgent::isMobile() || $session->useCookie() == false) { 
     200            $netUrl->addQueryString(session_name(), session_id()); 
     201        } 
     202 
     203        $netUrl->addQueryString(TRANSACTION_ID_NAME, SC_Helper_Session_Ex::getToken()); 
     204        $url = $netUrl->getURL(); 
    200205 
    201206        header("Location: $url"); 
     
    206211     * HTML_PATH からのパスを指定してリダイレクトする 
    207212     * 
    208      * @param string $location /html/ からの相対パス 
     213     * @param string $location /html/ からの相対パス。先頭に / を含むかは任意。「../」の解釈は行なわない。 
    209214     * @return void 
    210215     * @static 
    211216     */ 
    212217    function sendRedirectFromUrlPath($location, $arrQueryString = array(), $inheritQueryString = false, $useSsl = null) { 
    213         $location = URL_PATH . $location; 
     218        $location = URL_PATH . ltrim($location, '/'); 
    214219        SC_Response_Ex::sendRedirect($location, $arrQueryString, $inheritQueryString, $useSsl); 
    215220    } 
Note: See TracChangeset for help on using the changeset viewer.