A PHP function to check for cookies
I've written a php function and some helper functions that checks for cookies when somebody lands on a page but it's not so fast. I want to know is there any way to make it faster or improve it i know it's possible to check for cookies client side using javascript but what if it is disabled also so i need a pure server side solution.
<?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();
?>
It could be slow from all of the location redirects. But I've never done anything like that so I can't be sure.
Is it possible to lazily set the cookies. For instance, set a session and cookie on the first page load. And then, on the second page load check if the cookie is present.
This is how you could check if the page has loaded.
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!'
It's certainly not slow. Measure the time it takes:
microtime(true)
), You'll see that optimizing this code won't yield any improvement, since this PHP code probably takes a few milliseconds to execute while the page load can take up to a second for small pages.
链接地址: http://www.djcxy.com/p/71530.html上一篇: 消息框显示在asp.net问题
下一篇: 一个PHP函数来检查cookie