一个PHP函数来检查cookie

我写了一个php函数和一些帮助函数,它们在有人登录页面时检查cookie,但速度并不快。 我想知道是否有任何方法使其更快或改善它我知道可以使用JavaScript检查cookie客户端,但如果它被禁用,那么我需要一个纯粹的服务器端解决方案。

<?php

function check_cookie(){
    if(is_cookie_disabled()){
        header("location:cookie_is_disabled.php");
        exit;
    }        
}

function is_cookie_disabled(){
    $curr_url = $_SERVER['PHP_SELF'];
    if(isset($_COOKIE['testCookie']) && !(isset($_COOKIE['cookie']))){
        $original_url = original_url ($curr_url);
        header("location: ".$original_url);
        setcookie("cookie", 'enabled');
        exit;
    } elseif(!(isset($_COOKIE['testCookie']))) {
        if(isset($_GET['temp'])){                
            return true;
        } else{
            if(if_parameters_exist_in_url($curr_url)){
                $url = $curr_url."&temp=temp";
            } else {
                $url = $curr_url."?temp=temp";
            }
            header("location: ".$url);
            setcookie("testCookie", 'test');
            exit;              
        }
    }
    return false;
}

function original_url ($curr_url){
    if (!empty($_GET)){
        if (isset($_GET['temp'])) {
            if(count($_GET)>0){
                return removeqsvar($curr_url, 'temp');
            } else {
                return removeallvars($curr_url);
            }
        }
    }
    return $curr_url;
}    

function removeqsvar($url, $varname) {
    return preg_replace('/([?&])'.$varname.'=[^&]+(&|$)/','$1',$url);
}

function removeallvars($url){
    return $url = strtok($url, '?');
}

function if_parameters_exist_in_url($url){
    if (strpos($url, '=')) {
        return true;
    } else {
        return false;
    }
}    

//at the top of your pages
check_cookie();

?>

它可能从所有的位置重定向缓慢。 但我从来没有做过这样的事情,所以我不能确定。

是否可以懒惰地设置Cookie。 例如,在首页加载时设置会话和cookie。 然后,在第二页加载检查cookie是否存在。

这是如何检查页面是否已加载。

session_start();
$_SESSION['first_load'] = isset($_SESSION['first_load']) ? false : true;

if( !$_SESSION['first_load'] && isset($_COOKIE['testCookie']) )
  echo 'cookies enabled!'
else
  echo 'no cookies for you!'

这当然不慢。 测量所花费的时间:

  • 执行此代码(使用microtime(true) ),
  • 并让浏览器接收该页面(例如,Chrome在开发人员工具中有一个“网络”选项卡)。
  • 您会发现优化此代码不会产生任何改进,因为此PHP代码可能需要几毫秒才能执行,而对于小页面而言,页面加载可能需要一秒多的时间。

    链接地址: http://www.djcxy.com/p/71529.html

    上一篇: A PHP function to check for cookies

    下一篇: What event does JQuery $function() fire on?