【问题标题】:A PHP function to check for cookies用于检查 cookie 的 PHP 函数
【发布时间】:2012-03-01 13:56:08
【问题描述】:

我编写了一个 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 和 JavaScript 的人很少。您花费的时间超出了处理的价值。
  • @sarnold 尽快
  • 是的,但是 cookie 和 javascript 对网站性能都至关重要,我想完全控制它们

标签: php


【解决方案1】:

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

是否可以懒惰地设置cookies。例如,在第一个页面加载时设置会话和 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!'

【讨论】:

    【解决方案2】:

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

    • 执行此代码(使用microtime(true)),
    • 并让您的浏览器接收页面(例如,Chrome 在开发者工具中有一个“网络”标签)。

    您会发现优化此代码不会产生任何改进,因为此 PHP 代码可能需要几毫秒才能执行,而对于小页面,页面加载可能需要一秒钟。

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2013-05-28
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2011-09-28
      • 2015-12-16
      相关资源
      最近更新 更多