URL에서 특정 $ _get 변수를 제거하는 방법
-
06-07-2019 - |
문제
PHP에 저자가있는 웹 사이트가 있는데, 사용자가 오류를받을 때마다 다른 페이지로 리디렉션됩니다 (사용 header(Location:...)
) 및 오류 ID를 URL에 넣어 어떤 오류가 표시 될지 알 수 있습니다.
예 : 사용자가 제품 페이지에 액세스하려고하지만 해당 항목을 더 이상 사용할 수없는 경우 이전에보고 있던 항목 범주로 다시 리디렉션하고 URL에 지정된 오류 ID를 기반으로 오류를 표시합니다.
www.example.com/view_category.php?product_category_id=4&error_id=5
이 접근법에 대해 내가 좋아하지 않는 두 가지가 있습니다.
- URL에 error_id를 표시합니다.
- 페이지가 새로 고침되면 오류가 여전히 표시됩니다.
페이지가로드 된 후 나머지 변수를 그대로 두는 동안 URL에서 특정 $ _get 변수를 깨끗하게 제거하는 방법이 있습니까?
아마도 modrewrite 또는 페이지 자체로 다시 리디렉션을 사용하고 있지만 URL에서 Error_ID를 제거하거나 $ _session 변수를 사용하고 Error_ID를 URL에 넣는 것을 피하는 것입니다. 당신의 생각?
나는이 커뮤니티로부터 많은 것을 배우고 있으며, 질문을 제기했다면 새로운 것을 배우거나 스크립팅을 처음 접했기 때문에 다양한 아이디어를 얻을 수 있다고 생각했습니다.
해결책
아니요, 적어도 페이지 새로 고침이없는 것은 아니지만 어쨌든 데이터를 잃게됩니다.
임시 세션 변수를 사용하는 것이 좋습니다.
if ( /* error condition */ )
{
$_SESSION['last_error_id'] = 5;
header( 'Location: http://www.example.com/view_category.php?product_category_id=4' );
}
그런 다음 View_category.php에서
if ( isset( $_SESSION['last_error_id'] ) )
{
$errorId = $_SESSION['last_error_id'];
unset( $_SESSION['last_error_id'] );
// show error #5
}
다른 팁
그렇습니다 $_GET
PHP에서 ...
varToRemove = "anyVariable";
foreach($_GET as $variable => $value){
if($variable != varToRemove){
$newurl .= $variable.'='.$value.'&';
}
}
$newurl = rtrim($newurl,'&');
그런 다음 $ newurl을 링크에 넣습니다.
pageurl?something=something&<? echo $newurl; ?>
나는 그것이 오래된 게시물이라는 것을 알고 있지만, 다른 프로그래머는 그것을 검색 할 수 있습니다!
먼저 데이터베이스에 오류를 기록하십시오 :)
그런 다음 쿠키 또는 세션 변수를 설정 한 다음 사용자를 안전한 페이지로 리디렉션하십시오. 해당 페이지가로드되면 변수를 확인하고 오류를 표시 한 다음 쿠키 또는 세션 배열에서 변수를 삭제하십시오.
한 가지 방법은 비교하는 것입니다 HTTP_REFERER
이랑 SCRIPT_NAME
. 사용자가 새로 고침을 쳤다면 동일하게 될 것입니다.
빠른 해킹 : 당신도 가질 수 있습니다 imploded()
'D on "&"에서 $_SERVER['QUERY_STRING']
그 문자열을 조작하는 변수 explode()
'D 뒤로.
이 접근법이 작동하지 않습니까?
<?php
$params = array_diff($_GET, array("variable_name" => $value));
$new_query_string = http_build_query($params);
?>
<script>window.history.pushState('verify_email', 'Verify Email', '?<?php echo $new_query_string; ?>');</script>
나는 같은 문제가 있었다
노력하다 : http://www.azazia.com/kb/entry/26/
if (!empty($_GET['passvar'])) {
unset($_GET['passvar']);
echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=".$_SERVER['PHP_SELF']."\" >";
}
나를 위해 완벽하게 일합니다.