• (转)document.cookie.indexof的解释


    代码:
    function getCookie(c_name)
    {

        if(document.cookie.length > 0)

          {

            c_start = document.cookie.indexof(c_name + "=");

            if (c_start != -1)

               {

                 c_start = c_start + c_name.length + 1;

                 c_end = document.cookie.indexof(";", c_start);

                 if (c_end == -1)

                    {

                      c_end = document.cookie.length;

                     }

                   return usescape(document.cookie.substring(c_start, c_end));

               }

           }
     
    }

    解释:

    1、cookie保存在系统中的时候是“cookie名1 = cookie值; cookie名2 = cookie值”这样的方式来保存的。

    2、document.cookie是返回包含所有cookie的字符串。

    3、document.cookie.index(c_name + "=")是取得这个cookie名在整个cookie中的位置。(加“=”号:取cookie名加上等于号的位置,比方整个cookie是"user=tony; passwd=user123",这时候查找名为user的cookie值的时候,是查找"user="的位置;如果不要等于号,就会找到其它位置的"user",比如后面密码里面也有user字符,但并不是cookie中cookie名都是唯一的,所以加上等于号就不会出错。 )

    4、c_start = c_start + c_name.length + 1是用先前取得的位置加上cookie名的长度再加1,就是把位置确定在这个cookie名的“=”符号的后面。

    5、c_end = document.cookie.indexof(";", c_start)是从上一步的位置开始查找的,直到";"的位置。

    6、document.cookie.substring(c_start, c_end)就是取该cookie名的等号后面到分号前面的字符串,即对应的cookie的值。

    ====================

    更好的读取Cookie

            写代码的时候,我们经常去使用一些开放的代码,尤其是读写cookie这种非常常用写起来又很无趣的功能。比如我就很喜欢去拷一些源码过来用,但也并不就是完美的,比如它提供的下面这段代码:

    function getCookie(c_name)

    {

            if (document.cookie.length>0)

            {

                    c_start=document.cookie.indexOf(c_name + "=");

                    if (c_start!=-1)

                    { 

                            c_start=c_start + c_name.length+1;

                            c_end=document.cookie.indexOf(";",c_start);

                            if (c_end==-1) c_end=document.cookie.length;

                            return (document.cookie.substring(c_start,c_end));

                    } 

            }

            return "";

    }

            上面这段代码是用来读取cookie的,但它存在一个问题,比如当cookie中同时存在这样两个字段“kuin=12345”和"uin=67890"时,如果

    kuin在cookie中位于uin的前面,那么上面这段代码就无法读取uin的值了,因为它会误把kuin当作uin来读取。

            那么如何修复呢,下面是优化后的代码:

    function getCookie(c_name)

    {

            if (document.cookie.length>0)

            {

                    var tmp_cookie = document.cookie,

                    tmp_c1 = (tmp_cookie.indexOf(" "+c_name+"=")>0) ? (tmp_cookie.indexOf(" "+c_name+"=")+1) : 0,

                    tmp_c2 = (tmp_cookie.indexOf(";"+c_name+"=")>0) ? (tmp_cookie.indexOf(";"+c_name+"=")+1) : 0,

                    tmp_c3 = (tmp_cookie.indexOf(c_name+"=")==0) ? 0 : -1,

                    c_start=tmp_c1 || tmp_c2 || tmp_c3;

                    if (c_start!=-1)

                    {

                            c_start=c_start + c_name.length+1;

                            var c_end=tmp_cookie.indexOf(";",c_start);

                            if (c_end==-1) c_end=tmp_cookie.length;

                            return (tmp_cookie.substring(c_start,c_end));

                    }

            }

            return "";

    }

    补充:如果cookie中存在大量的值,我们就没有必要不断的使用getCookie()去读取了,更高效的方法是在第一次读取时直接将所有cookie解

    析出来并存放在一个对象中,如下:

    cookie = {

            uin: 12345,

            kuin: 59432,

            nick: flondon

    };

  • 相关阅读:
    Linux c 开发25 VScode C++ 运行中文乱码
    IEC104开发3 lib60870IEC 608705101 / 104 SOE
    Linux c 开发26 cmake生成项目
    STM32 例程7 STM32固件库方式 读取SHT20 温湿度
    基本电路学习1 12v转5V 电路
    github copilot 代码智能提示 AI代码提示
    Cesium polygon polyline entity label 贴地 点线面文本模型贴地 clampToGround 地面遮挡 地底遮挡 文字遮挡 道路遮挡 地形遮盖 地图遮盖
    UE4 HTTP REST 请求与高德天气预报接口 VaRest 插件
    UE4 蓝图截图 全屏截图 蓝图笔记截图 蓝图高清截图 蓝图保存插件 Blueprint Graph Screenshot(蓝图截图插件)
    window Carnac 实时显示键盘按键 桌面显示按钮 虚拟键盘 演示键盘 直播教学键盘
  • 原文地址:https://www.cnblogs.com/wanshutao/p/3981373.html
Copyright © 2020-2023  润新知