• PHP与JavaScript下的Cookie操作


    原文链接:http://www.nowamagic.net/webdesign/webdesign_CookieInPhpJavascript.php

    下面的例子列出几种情形交互场景,列出JS和php交互的方法。总结下,以免日后再为cookie问题困扰。

    setcookie.php
    <?php 
        setcookie('php_cn_ck','php_中文_cookie'); 
        setcookie('php_en_ck','php_english_cookie'); 
    ?>
    
    <script src="cookie.js"></script> 
    <script> 
        Cookies.set('js_cn_ck','js_中文_cookie',5000); 
        Cookies.set('js_en_ck','js_english_cookie'); 
    </script> 
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf8"> 
    PHP cookie已经设置<br>php_cn_ck=php_中文_cookie<br>php_en_ck=php_english_cookie<br><br> 
    JS cookie已经设置<br>js_cn_ck=js_中文_cookie<br>js_en_ck=js_english_cookie<br><br> 
    <a href=getcookie.php>读取cookie</a><br> 
    getcookie.php
    <meta http-equiv="Content-Type" content="text/html; charset=utf8"> 
    一 读取php传送的中英文cookie<br><br> 
    <p>1 php读取php设置php cookie<br><br> 
    
    <?php 
        include('function.php'); 
        $php_cn_ck=$_COOKIE['php_cn_ck']; 
        $un_php_cn_ck=unescape($php_cn_ck); 
        echo "解码前的中文cookie:php_cn_ck=$php_cn_ck<br><br>"; 
        echo "解码后的中文cookie:un_php_cn_ck=$un_php_cn_ck<br><br>"; 
        $php_en_ck=$_COOKIE['php_en_ck']; 
        echo "英文cookie无需解码:php_en_ck=$php_en_ck<br><br>"; 
    ?>
    
    <p>2 js读取php设置cookie<br><br> 
    <script src="cookie.js"></script> 
    <script> 
        php_cn_ck=Cookies.get('php_cn_ck'); 
        un_php_cn_ck = decodeURIComponent (escape(php_cn_ck)); 
        document.write("解码前的中文cookie :php_cn_ck="+php_cn_ck+"<Br><br>"); 
        document.write("解码后的中文cookie :un_php_cn_ck="+un_php_cn_ck+"<Br><br>"); 
        php_en_ck=Cookies.get('php_en_ck'); 
        document.write("英文cookie无需解码 :php_en_ck="+php_en_ck+"<Br><br>"); 
    </script> 
    -----------------------------------------------<br> 
    二 读取JS传送的中英文cookie<br><br> 
    <p>1 php读取JS设置js cookie<br><br> 
    <?php 
        $js_cn_ck=$_COOKIE['js_cn_ck']; 
        $un_js_cn_ck=unescape($js_cn_ck); 
        echo "解码前的中文cookie:js_cn_ck=$js_cn_ck<br><br>"; 
        echo "解码后的中文cookie:un_js_cn_ck=$un_js_cn_ck<br><br>"; 
        $js_en_ck=$_COOKIE['js_en_ck']; 
        echo "英文cookie无需解码:js_en_ck=$js_en_ck<br><br>"; 
    ?> 
    </p> 
    <p>2 js读取js设置的cookie<br><br> 
    <script> 
        js_cn_ck=Cookies.get('js_cn_ck'); 
        document.write("解码前的中文cookie :js_cn_ck="+js_cn_ck+"<Br><br>"); 
        //un_js_cn_ck = decodeURIComponent (escape(js_cn_ck)); 调用这两句会出现js解析中断 
        //document.write("解码后的中文cookie :un_js_cn_ck="+un_js_cn_ck+"<Br><br>"); 
        js_en_ck=Cookies.get('js_en_ck'); 
        document.write("英文cookie无需解码 :js_en_ck="+js_en_ck+"<Br><br>"); 
    </script> 
    </p>

    总结:

    1. php用自身函数读取php 的cookie,没有任何障碍,无需解码处理。
    2. js采用cookie.js方法读取js 的cookie,没有任何障碍,无需解码处理。
    3. js读取php的中文cookie,需要做 "decodeURIComponent (escape(php_cn_ck)) "函数处理
    4. php读取js的中文cookie 需要做 "unescape()" 函数处理
    cookie.js
        var Cookies = {}; 
        /** 
        * 设置Cookies 
        */ 
        Cookies.set = function(name, value){ 
            var argv = arguments; 
            var argc = arguments.length; 
            var expires = (argc > 2) ? argv[2] : null; 
            if(expires != null){ 
                var exp   = new Date(); 
                 exp.setTime(exp.getTime() + 8*3600 + expires); 
            } 
            alert(exp.toGMTString()); 
            var path = (argc > 3) ? argv[3] : '/'; 
            var domain = (argc > 4) ? argv[4] : null; 
              var secure = (argc > 5) ? argv[5] : false; 
            document.cookie = name + "=" + escape (value) + 
            ((expires == null) ? "" : ("; expires=" + exp.toGMTString())) + 
            ((path == null) ? "" : ("; path=" + path)) + 
            ((domain == null) ? "" : ("; domain=" + domain)) + 
            ((secure == true) ? "; secure" : ""); 
        }; 
        /** 
        * 读取Cookies 
        */ 
        Cookies.get = function(name){ 
            var arg = name + "="; 
            var alen = arg.length; 
            var clen = document.cookie.length; 
            var i = 0; 
            var j = 0; 
            while(i < clen){ 
                j = i + alen; 
                if (document.cookie.substring(i, j) == arg) 
                    return Cookies.getCookieVal(j); 
                i = document.cookie.indexOf(" ", i) + 1; 
                if(i == 0) 
                    break; 
            } 
            return null; 
        }; 
        /** 
        * 清除Cookies 
        */ 
        Cookies.clear = function(name) { 
            if(Cookies.get(name)){ 
            var expdate = new Date();  
            expdate.setTime(expdate.getTime() - (86400 * 1000 * 1));  
            Cookies.set(name, "", expdate);  
        } 
    }; 
        Cookies.getCookieVal = function(offset){ 
            var endstr = document.cookie.indexOf(";", offset); 
            if(endstr == -1){ 
                endstr = document.cookie.length; 
            } 
            return unescape(document.cookie.substring(offset, endstr)); 
        }; 
  • 相关阅读:
    EL表达式遍历方法之一
    django auth认证
    总结五个在办公中使用很爽的软件
    django所遇到问题简单总结
    django 远程数据库mysql migrate失败报error 1045之 解决方案
    深拷贝和浅拷贝之地址改变
    序列表转换成横向菜单
    Pycharm破解
    css里涉及到定位相关的example实例
    记录求职
  • 原文地址:https://www.cnblogs.com/hubery/p/3061153.html
Copyright © 2020-2023  润新知