PHP: Detect Page Refresh

前端 未结 9 1435
余生分开走
余生分开走 2020-11-28 13:54

I have a page action.php on which I run an SQL query through the code, so that whenever the page is viewed the query runs like its like counting page vi

相关标签:
9条回答
  • 2020-11-28 13:54

    If you just want to run it once for a user, I would set a session cookie and then use an if() statement.

    <?php
    session_start();
    
    if (!$_SESSION['loaded'])
    {
        // insert query here
    }
    
    $_SESSION['loaded'] = true;
    
    ?>
    
    0 讨论(0)
  • 2020-11-28 13:57

    This can work in your scenario:

    if(isset($_GET["token"])) {
        $view_token = $_GET["token"];
    } else {
        $new_views = $views + 1;
        // UPDATE VIEWS
        $view_token = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 5)), 0, 5);
        header("Location: ?token=$view_token");
    }
    

    If the user has a token in the URL, the view count will not update. Therefore, if the user tries to refresh, it will not update the view count. When the user does not have a token in the URL, the view count updates and refreshes the page WITH a token. It is thinking outside of the box but it works!

    0 讨论(0)
  • 2020-11-28 14:02

    i have solved the problem ... HURRAHHH with no session & no cookies

    the solution is a combination of PHP : AJAX : JavaScript

    the query that you want to run on Page Load & not on page Refresh run it as via AJAX call lets say my function for doing that is

    function runQUERY()
    {
        xmlhttp=new XMLHttpRequest();
        xmlhttp.open("POST","doIT.php",false);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send();
    }
    

    and i can simply check with Javascript that the page is a fresh load or its a refresh by doing the following

    <head>
    <script type="text/javascript">
    function checkRefresh()
    {
        if( document.refreshForm.visited.value == "" )
        {           
            // This is a fresh page load
                alert ( 'Fresh Load' );
            document.refreshForm.visited.value = "1";
                ..call you AJAX function here
        }
        else
        {
            // This is a page refresh
            alert ( 'Page has been Refreshed, The AJAX call was not made');
    
        }
    }
    </script>    
    </head>
    
    <body onLoad="checkRefresh()">
    
    <form name="refreshForm">
    <input type="hidden" name="visited" value="" />
    </form>
    
    </body>
    </html>
    

    and in your doIT.php simple add your PHP code which you were going to put in the normal page

    <?php
    mysql_query("UPDATE---------");
    //put any code here, i won't run on any page refresh
    ?>
    
    0 讨论(0)
  • 2020-11-28 14:03
        //here you get the url behind the domain.
        $currentPage = $_SERVER['REQUEST_URI']; 
    
        //if the session current page is not set.
        if(!isset($_SESSION['currentPage'])){ 
    
          //set the session to the current page.
          $_SESSION['currentPage'] = $currentPage;     
        }
    
        //check if the session is not equal to the current page
        if($_SESSION['currentPage'] != $currentPage){
    
           // if it's not equal you set the session again to the current page.
           $_SESSION['currentPage'] = $currentPage;
    
           //set the query you want to use
        }
    
    0 讨论(0)
  • 2020-11-28 14:05

    You can't directly detect a page refresh, but you can use a cookie to simulate what you want:

    if (isset($_COOKIE['action'])) {
      // action already done
    } else {
      setcookie('action');
      // run query
    }
    

    Depending on your requirements, you also need to decide when to remove the cookie and/or perform the action again.

    0 讨论(0)
  • 2020-11-28 14:07

    Best way to Detect Page Refresh. or Not ?(Ctrl+F5,F5,Ctrl+R, Enter)

    $pageRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) &&($_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0' ||  $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache'); 
    if($pageRefreshed == 1){
        echo "Yes page Refreshed";
    }else{
        //enter code here
        echo "No";
    }
    
    0 讨论(0)
提交回复
热议问题