2016-05-24 169 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