Stay Hungry,Stay Foolish!

检测浏览器是否支持cookie方法

cookie

摘自: http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html

Cookie是什么? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。

为什么需要Cookie? 因为HTTP协议是无状态的,对于一个浏览器发出的多次请求,WEB服务器无法区分 是不是来源于同一个浏览器。所以,需要额外的数据用于维护会话。 Cookie 正是这样的一段随HTTP请求一起被传递的额外数据。

客户端检测

使用浏览器端的js语句来检测,具体思路是,先设置一个cookie, 然后尝试读取此cookie,如果读取不到则表示,浏览器不支持此cookie, 如果能够读取到, 则表示浏览器支持cookie。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./jquery.js"></script>
    <link rel="stylesheet" href="./test.css" />
</head>
<body>
    <style>
        <!--
        #template{
            background:red;
        }-->
        <!-- error -->
    </style>
    <div id="template" name="template">
        <input type="button" id="testBtn" value="click me">
    </div>
    <script>

    function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值  
    { 
       var Days = 30; //此 cookie 将被保存 30 天  
       var exp = new Date(); //new Date("December 31, 9998");  
       exp.setTime(exp.getTime() + Days*24*60*60*1000); 
       document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); 
    } 
    function getCookie(name)//取cookies函数     
    { 
       var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); 
       if(arr != null) return unescape(arr[2]); return null; 

    } 
    function delCookie(name)//删除cookie  
    { 
       var exp = new Date(); 
       exp.setTime(exp.getTime() - 1); 
       var cval=getCookie(name); 
       if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString(); 
    }  
    
    
    //检测是否支持cookie
    SetCookie('cookie_test','1'); 
    var cookie_test = getCookie('cookie_test'); 
    if( '1' != cookie_test) 
    { 
     alert('不支持'); 
    }
    else 
    { 
     alert('支持'); 
    } 
    </script>
</body>
</html>

 

服务器端检测

有时候,例如大多数的网址登陆都需要cookie支持, 如果cookie关闭,则后台登陆功能也应该同步关闭,不允许有请求过去进行强制登陆, 这样就需要通过一种手段让服务器知道浏览器是否支持cookie。

在http报文中, 没有特殊的头域来标识浏览器对cookie的支持程度,

可以采用两次访问方法解决: 第一次页面访问,服务器在响应头中添加cookie信息, 第二次页面访问则会带有cookie信息(如果浏览器支持), 服务器端收到第一次访问设置的cookie信息,则表示浏览器支持cookie。

 

下面示例代码,第一次访问,_TESTCOOKIE为空, 第二次访问打印出来是1

<?php
 header("Set-Cookie: _TESTCOOKIE=1");
 
 echo 'Hello _TESTCOOKIE=' . htmlspecialchars($_COOKIE["_TESTCOOKIE"]) . '!';

 exit;
?>

 

 

posted @ 2014-12-27 11:21  lightsong  阅读(4708)  评论(0编辑  收藏  举报
Life Is Short, We Need Ship To Travel