2016-05-24 215 views
0

我就在想,如果有隱藏在PHP/Zend框架2.像這樣的URL的一部分的方式:隱藏部分

sitename.com/something/?inviter=1234&id=1 

但我想隱藏與部分& ID = 1莫名其妙,這樣當網址複製並通過用戶輸入的,它應該是這樣的:

sitename.com/something/?inviter=1234 

而在另一邊,我可以做這樣的事情:

$id = $_GET["id"]) 

這可能嗎,如果是這樣,怎麼辦?也許有些東西與我期待的目標接近?

+2

你不能...... –

回答

0

只能使用Cookie或會話技術來隱藏它。但它只能在一個會話中爲一個用戶使用。

0

您可以使用parse_urlhttp_build_urlparse_strhttp_build_str解析並重建網址。

例如:

/** 
* Transform a url using a whitelist of query-string keys 
*/ 
function transformUrlKeepQueryKeys($url, array $whitelist) 
{ 
    // Break the given url into parts 
    $parts = parse_url($url); 

    // Break the parts into key-value pairs 
    $query = $parts['query']; 
    parse_str($query, $queryParts); 

    // Unset all unwanted keys 
    foreach (array_keys($queryParts) as $k) { 
     if (!in_array($k, $whitelist)) { 
      unset($queryParts[$k]); 
     } 
    } 

    // rebuild the url 
    $parts['query'] = http_build_query($queryParts); 

    // return 
    return http_build_url('', $parts); 
} 

調用應該是:

$url = 'http://sitename.com/something/?inviter=1234&id=1'; 
$whitelist = [ 
    'inviter' 
]; 
$expectedUrl = 'http://sitename.com/something/?inviter=1234'; 
$actualUrl = transformUrlKeepQueryKeys($url, $whitelist); 
assert($expectedUrl == $actualUrl); 

或者,您可以使用按鍵的黑名單刪除實行類似的東西。

唯一的問題是函數http_build_url未包含在覈心PHP中,但是是PECL HTTP擴展的一部分。如果您無法在您的環境中安裝該擴展,那麼您可以使用該功能的純PHP實現,例如here