2013-01-21 111 views
3

我有一个奇怪的问题,我相信你们大多数人都意识到,这些问题是由某些开发人员无法控制的情况引起的!在URL中保留一个GET变量

我想了解如何在URL中始终保持查询字符串参数。如果该参数没有设置,我想默认添加到URL?param = something

我问了一个关于这个问题的前一个问题,并且已经能够使用htaccess添加一个默认查询 - 但是这个只适用于初始请求,而我需要确保它始终存在于地址中。

我想使用一个cookie - 用PHP设置,然后用.htaccess查询。

所以,我问这是否可能,如果有更好的方式做到这一点?

+0

我真的要问。为什么? – webnoob

+0

如果您在提供值时使用默认值,那还不够吗? –

+0

您当然可以使用cookie,但我没有看到其他解决方案的优势。但请注意,cookie值不会填充到$ _GET超全局变量中。 – arkascha

回答

1

没有改变所有的网址我不能看到这是可能的,正如讨论这是一个非常hacky的方式来做到这一点。

我建议你给他们一个“特殊”的按钮,他们用来复制链接。让他们使用此按钮来复制链接而不是URL。然后,您可以正确控制数据而不会黑客入侵网站。

编辑:你“可以”添加一些JQuery来添加所有链接与你的参数。你有没有想过这个?

$(document).ready(function() { 
    $('a[href]').each(function() { 
    this.href = this.href + '?something=<?php echo $_SESSION["myparam"]; ?>' 
    }); 
}); 

你可以得到从初始页面加载/会话帕拉姆但是这需要用户拥有支持JS(很多人现在做的)。

p.s未经测试的半伪代码。如果你决定走这条路,我可以正确地测试它。

+0

我创建了一个附加正确查询字符串的页面链接按钮,但jQuery的想法很好,因为我已经将它包含在网站上。谢谢 –

0

$_GET and $_POST超全局变量那些并不意味着像这样使用。我不知道为什么它是必需的,但无论如何,您可以使用SessionCookies获得所需的功能。你试图做的是不实际的。行业标准是使用会话和cookie。试试看,我确信它会帮助你。如果您有任何问题,请告诉我。

+0

该会话已经运行并设置了用户类型 - 但仅当?param =设置了某些内容时。如果该用户转到其他页面,他们的会话仍处于活动状态,但查询字符串消失了。如果他们复制地址并将其发送给客户端,则客户端无法获得正确的内容。这样解释吗? –

+1

@AlexHolsgrove - 我现在看到您的问题。你不能给他们一个他们用来复制链接的“特殊”按钮吗?让他们使用此按钮来复制链接而不是URL。然后,您可以正确控制数据而不会黑客入侵网站。 – webnoob

+0

这是我最初的解决方案,但被更高的权力拒绝......看起来它现在是唯一可行的解​​决方案:) –

0

如果您使用的是Apache 2,那么您可以添加一个重写规则,将GET参数附加到每个在其URL中没有“param = ...”的请求。类似(未经测试):

RewriteCond %{QUERY_STRING} !(\A|&)param= 
RewriteRule (.*) $1?param=defaultvalue [QSA] 

有关详细信息,请参阅modrewrite 's doc。如果您想将其限制为某个网址,您可以在%{REQUEST_URI}上添加另一个RewriteCond

+0

谢谢你的回答。我设法得到你的建议工作(请参阅我以前的问题:http://stackoverflow.com/questions/14339035/default-query-string-in-htaccess)但它不能完全解决我的问题。我已经实现了一个按钮来复制URL并追加查询字符串 - 这是一个快速而干净的解决方案 –

0

我大约3个月前才学会了PHP,所以我希望我不会带领你走下一条路,这就是我会尝试的。


编辑:自从我学习了php以来已经有大约5个月了。我之前的版本在编辑之前只能“建立”获取追加(并且它可能不起作用)。

if (!isset($_GET['param'])) {$_GET['param'] = 'something';} 

$var = ''; 
while ($other_gets = $_GET) 
{ 
    foreach ($other_gets as $key=>$value) 
    { 
    if ($key = 'something') {}//do nothing we want the other gets 
    else {$var .= '&'.$key.'='.$value;} 
    } 
} 
$get = '?'.$user_param.$other_gets; 

的preg_replace您的扩展

$string = 'your webpage before output'; 
$patterns = array(); 
$patterns[0] = '/.html/'; 
$patterns[1] = '/.php/'; 
$patterns[2] = '/yoursite.com /';//with space 
$replacements = array(); 
$replacements[0] = '.html'.$get; 
$replacements[1] = '.php'.$get; 
$replacements[2] = 'yoursite.com/index.php'.$get; 

然后打印字符串

echo preg_replace($patterns, $replacements, $string);