我正在使用Querystring重定向到另一个页面,比如说
header('location:abc.php?var=1');
我可以使用以下代码在querystring值的帮助下在重定向页面上显示一条消息,比如说
if (isset ($_GET['var']))
{
if ($_GET['var']==1)
{
echo 'Done';
}
}
但我的问题是,即使刷新页面,该消息仍会继续显示。因此,我希望在页面刷新时删除该消息,即刷新时URL中不应存在值或查询字符串。
提前致谢。
答案 0 :(得分:5)
您无法“在刷新时删除查询参数”。 “刷新”表示浏览器再次请求相同的URL,没有特定的事件在刷新时触发,可以让您将其与常规页面请求区分开来。
因此,摆脱查询参数的唯一选择是在显示消息后重定向到不同的URL。比方说,使用Javascript,您在10秒左右后重定向到不同的页面。这显着改变了用户体验,并没有真正解决问题。
选项二是将消息保存在服务器端会话中并显示一次。例如:
if (isset($_SESSION['message'])) {
echo $_SESSION['message'];
unset($_SESSION['message']);
}
这个可以引起并行请求的混淆,但几乎可以忽略不计。
选项三可以是两者的组合:使用某些唯一令牌在会话中保存消息,然后在URL中传递该令牌,然后显示消息一次。 E.g:
if (isset($_GET['message'], $_SESSION['messages'][$_GET['message']])) {
echo $_SESSION['messages'][$_GET['message']];
unset($_SESSION['messages'][$_GET['message']]);
}
答案 1 :(得分:4)
更好地使用会话
将值分配给会话var
$_SESSION['whatever'] = 1;
在下一页上,使用它,稍后取消设置
if(isset($_SESSION['whatever']) && $_SESSION['whatever'] == 1) {
//Do whatever you want to do here
unset($_SESSION['whatever']); //And at the end you can unset the var
}
这将是一个更安全的选择,因为它将使您免于清理获取值,并且还将从用户隐藏值
答案 2 :(得分:1)
当消息提示要求不存在的会话时。如果为false,则显示消息,如果为true,则不执行任何操作。在session_start();如果以前没有一个人,那就只需要。
session_start();
if ($_GET['var']==1 && !isset($_SESSION['message_shown']))
{
$_SESSION['message_shown'] = 1;
echo 'Done';
}
答案 3 :(得分:1)
这是一个优雅的JavaScript解决方案。如果浏览器支持history.replaceState(http://caniuse.com/#feat=history),您只需调用window.history.replaceState( Object , Title , URL )并使用干净的URL替换浏览器历史记录中的当前条目。查询字符串将不再用于刷新或后退/上一个按钮。
答案 4 :(得分:0)
尝试这种方式[使用会话]
<?php
//abc.php
session_start();
if (isset ($_GET['var']))
{
if ($_GET['var']==1)
{
if(isset($_SESSION['views']))
{
//$_SESSION['views']=1;
}
else
{
echo 'Done';
$_SESSION['views']=1;
}
}
}
?>
答案 5 :(得分:0)
认为问题是这样的吗?
$uri_req = trim($_SERVER['REQUEST_URI']);
if(!empty($_SERVER['REQUEST_URI'])){
$new_uri_req = str_replace('?avar=1', '?', $uri_req);
$new_uri_req = str_replace('&avar=1', '', $new_uri_req);
$pos = strpos($new_uri_req, '?&');
if ($pos !== false) {
$new_uri_req = str_replace('?&', '?', $new_uri_req);
}
}
if( strrchr($new_uri_req, "?") == '?' ){
$new_uri_req = substr($new_uri_req, 0, -1);
}
echo $new_uri_req; exit;
您可以使用网址进行重定向,而无需使用var。您也可以在js中执行相同的操作。
str_replace()可以传递要替换的值数组。可以将对str_replace()的前两个调用统一,并填充需要删除的任意多个var。还要注意,使用preg_replace()可以使用regexp,它可以管理值可能会更改的任何传递的var。干杯!