【问题标题】:how do I show a php page just once only per user如何只为每个用户显示一次 php 页面
【发布时间】:2011-07-19 01:12:09
【问题描述】:

您好,我有一个 php 页面,我希望每个用户只显示一次。

我认为这可能通过 cookie、会话超时或会话 cookie 实现。

但我不确定。

谢谢你的好意:)

【问题讨论】:

  • 每个用户会话一次还是“永远”一次?
  • 你可以做,每个IP地址只有1个人可以查看。

标签: php cookies session-timeout session-cookies


【解决方案1】:

您通过设置 cookie 回答了您自己的问题。

// check if they've been here, if they haven't set
// a cookie for subsequent visits
if($_COOKIE['beenhere']) { 
    setcookie("beenhere", '1');
}
else {
    // where you want them to go if they've seen this page
    header('Location: http://www.example.com/');

更多信息:

如果您希望单个用户不再看到该页面,您必须设置 cookie 的过期时间(请参阅上面的链接页面),因为关闭浏览器将消除我在上面设置的 cookie。

【讨论】:

  • 这个很好,我以前也用过。但是,有没有办法让每个用户都有这个?我有一个 $_SESSION 变量,我想要它,所以当新手用户进来时,显示一个页面。一台计算机可以使用多个会话登录,因此不能选择使用 cookie。有什么帮助吗?
【解决方案2】:

要为每个用户会话显示一次页面,您可以尝试以下操作

//mypage.php

if(!isset($_SESSION['mypage_view'])
{
     $_SESSION['mypage_view'] = 1;   
} else {
     //check if this is not the first time the page has been viewed
     if(isset($_SESSION['mypage_view'])) {
      //not first time redirect
      header('location: google.com');
      session_write_close();
      exit();
     }
}

【讨论】:

    【解决方案3】:

    你也可以使用会话

    if($_SESSION['sessioned_here'] == null) {
        // just been on this page
    } else {
        // visited already. get out
    
    }
    

    【讨论】:

    • 会话创建了一个 cookie,所以实际上你正在使用一个 cookie
    【解决方案4】:

    最好的方法是获取访问者的 IP。然后你应该把它保存在数据库中。

    您可以使用此代码:

    
        function getUserIP(){
            if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
                $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
                $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
            }
            $client  = @$_SERVER['HTTP_CLIENT_IP'];
            $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
            $remote  = $_SERVER['REMOTE_ADDR'];
    
            if(filter_var($client, FILTER_VALIDATE_IP)){
                $ip = $client;
            }
            elseif(filter_var($forward, FILTER_VALIDATE_IP)){
                $ip = $forward;
            }else{
                $ip = $remote;
            }
            return $ip;
        } $user_ip = getUserIP();
    
    
    $rowsnumber = $con->query("SELECT * FROM `visitors` WHERE ip='" . $user_ip . "'")->num_rows;
        $nowdate = date("Y-m-d");
        
        if($rowsnumber == 0){ 
            // First Time Visit
            mysqli_query($con, "INSERT INTO `visitors` (`visitdate`, `ip`) VALUES ('$nowdate','$user_ip')");
        }else{
            $visitorresualt = mysqli_query($con,"SELECT `visitdate` FROM `visitors` WHERE ip='" . $user_ip . "'");
            $thisvisitor = mysqli_fetch_array($visitorresualt,MYSQLI_NUM);
            
            if($thisvisitor[0] != $nowdate){
                
                //Todays First Visit
                $newvisit = $thisvisitor[1] + 1;
                mysqli_query($con, "UPDATE `visitors` SET `visitdate`='$nowdate' WHERE ip = '" . $user_ip . "'");
            }
            
        }
    

    【讨论】:

    • 我不认为在这里更改超全局值REMOTE_ADDR 是个好主意。
    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多