`
micheal19840929
  • 浏览: 166525 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Cookie之二

    博客分类:
  • J2EE
阅读更多

17.2  存取Cookie

创建Cookie的方式与定义一个变量的方式有些类似,都必须使用Cookie名和Cookie值。同一个网站可以创建多个Cookie,而多个Cookie可以存放在同一个Cookie文件中。使用Document对象的cookie属性可以设置一个Cookie,也可以从一个Cookie文件中读取所有的Cookie内容。

17.2.1  存取Cookie的方法

在JavaScript中存取Cookie时,必须要使用Document对象的cookie属性。创建或修改一个Cookie的语法代码如下所示:

document.cookie = "name=value"

在以上代码中,name为Cookie名,value为Cookie值。如果要创建多个Cookie,可以多次使用以上代码。使用Document对象的cookie属性,也可以读取Cookie文件中的Cookie信息。如以下代码所示:

var cookies = document.cookie

在以上代码中,cookies为变量名,document.cookie可以取得整个Cookie文件中的信息,因此,变量cookies有可能会包括多个Cookie的信息。

17.2.2  创建与读取Cookie

使用Document对象的cookie属性可以创建和读取Cookie。其具体实现方法如代码清单17-1所示,请注意加粗的文字。

代码清单17-1  创建与读取Cookie

<html>

    <head>

        <title>创建与读取Cookie</title>

        <meta http-equiv="content-type" content="text/html;charset=gb2312">

        <script language="javascript" type="text/javascript">

            <!--

                //设置Cookie

                function setCookie()

                {

                    var userName = myForm.myName.value;

                    var userPassword = myForm.myPassword.value;

                    //添加或修改第一个Cookie,该Cookie名为cookieUserName,值
                    //为“姓名”文本框中的内容

                    document.cookie = "cookieUserName="+userName;

                    //添加或修改第二个Cookie,该Cookie名为cookieUserPassword,
                    //值为密码框中的内容

                    document.cookie = "cookieUserPassword="+userPassword;

                }

                //读取Cookie

                function getCookie()

                {

                    //获得Cookie文件中的信息

                    var cookieMesaage = document.cookie;

                    alert(cookieMesaage);

                }

            -->

        </script>

    </head>

    <body>

        <form name="myForm">

            姓名:<input type="text" name="myName"><br>

            密码:<input type="password" name="myPassword"><br>

            <input type="button" value="设置Cookie" onclick="setCookie()">

            <input type="button" value="读取Cookie" onclick="getCookie()">

        </form>

    </body>

</html>

 上述代码为光盘目录里“代码\第17章\sample01.htm”的内容,本例的关键知识点如下所示:

(1)创建了一个文本框,一个密码框和两个按钮。

(2)单击【设置Cookie】按钮时,调用setCookie()函数。在该函数中,先获取文本框和密码框中的文字,然后使用以下代码添加一个Cookie。

document.cookie = "cookieUserName="+userName;

在以上代码中,Cookie名为“cookieUserName”,Cookie值为文本框中的内容。

(3)然后使用以下代码创建另一个Cookie,该Cookie名为“cookieUserPassword”,值为密码框中的内容。

document.cookie = "cookieUserPassword="+userPassword;

(4)单击【读取Cookie】按钮时,调用getCookie()函数。在该函数中,使用以下代码获取Cookie文件中的所有信息。

var cookieMesaage = document.cookie;

(5)然后使用alert()方法,将变量cookieMesaage的值输出,如图17-1所示。从图17-1中可以看出,Cookie文件中记录了两个Cookie的名称和值。

 

图17-1  sample01.htm的运行结果

在默认情况下,只要打开sample01.htm文件的浏览器窗口还没有关闭时,Cookie就会一直存在,同一网站上的其他网页也可以读取该Cookie。代码清单17-2就是一段读取Cookie内容的代码,请注意加粗的文字。

代码清单17-2  读取Cookie

<html>

    <head>

        <title>读取Cookie</title>

        <meta http-equiv="content-type" content="text/html;charset=gb2312">

        <script language="javascript" type="text/javascript">

            <!--

                var cookieMesaage = document.cookie;

                if (cookieMesaage=="")

                {

                    document.write("没有获得Cookie值,请确认sample01.htm文
                    件是否打开");

                }

                else

                {

                    document.write("Cookie文件中的内容为:<br>",cookie-
                    Mesaage);

                }

            -->

        </script>

    </head>

    <body>

    </body>

</html>

 上述代码为光盘目录里“代码\第17章\sample02.htm”的内容。如果打开sample01.htm的浏览器窗口而且还没有关闭,那么该文件可以读取sample01.htm文件所创建的Cookie,如图17-2所示。如果打开sample01.htm的浏览器窗口已经关闭,则该文件读取的Cookie内容为空,那么运行该文件的结果如图17-3所示。

 

图17-2  没有关闭sample01.htm窗口时的运行结果

 

图17-3  关闭sample01.htm窗口时的运行结果

17.2.3  精确读取Cookie值

从上例中可以看出,使用document.cookie获得的是整个Cookie文件中的内容,因此,很有可能会包括多个Cookie的内容。如果要精确获取某个Cookie的值,就必须要使用String对象中的一些方法。在图17-2中,整个Cookie文件中的内容如下所示:

cookieUserName=张三; cookieUserPassword=123456

以上内容包括了cookieUserName和cookieUserPassword两个Cookie的名和值,如果要获得其中一个Cookie的值,具体实现步骤如下所示:

(1)使用document.cookie获得整个Cookie文件的内容。

(2)如果要获得某个Cookie的值,可以使用String对象的substring()方法来截取该Cookie值的某一部分。以cookieUserName为例,就必须要截取从“张三”开始到“;”为止这部分的子字符串。

(3)要获得某个指定的Cookie值,就必须要获得Cookie值的开始和结束位置。由于Cookie值是不固定的,而Cookie名是固定的,所以可以先获得Cookie名的开始位置,以cookieUserName为例,就必须要获得子字符串“cookieUserName=”在整个字符串的位置。之所以要加上“=”,是为了防止某个Cookie的值中正好包含了“cookieUserName”字符串。

(4)获得了Cookie名的开始位置之后,可以通过Cookie名的开始位置加上Cookie名的长度再加上1(即加上了“=”的位置)的方法来获得Cookie值的开始位置。

(5)获得了Cookie值的开始位置之后,还必须要知道Cookie值的结束位置才可以使用String对象的substring()方法来截取Cookie值。

(6)获得Cookie值的结束位置有两种情况:

第一种情况是该Cookie值之后还有Cookie,那么就要从该Cookie值的开始位置查找,第一个“;”出现的位置就是Cookie值的结束位置。

第二种情况是该Cookie值之后没有其他Cookie了,那么该Cookie值的结束位置也就是整个Cookie内容的最后位置,可以通过Cookie内容的长度来获得该结束位置。

(7)最后使用String对象的substring()方法来获得Cookie的值。

代码清单17-3显示了如何精确读取Cookie的值,请注意加粗的文字。

代码清单17-3  精确读取Cookie值

<html>

    <head>

        <title>精确读取Cookie值</title>

        <meta http-equiv="content-type" content="text/html;charset=gb2312">

        <script language="javascript" type="text/javascript">

            <!--

                //设置Cookie

                function setCookie()

                {

                    var userName = myForm.myName.value;

                    var userPassword = myForm.myPassword.value;

                    //添加或修改第一个Cookie,该Cookie名为cookieUserName,值
                    //为“姓名”文本框中的内容

                    document.cookie = "cookieUserName="+userName;

                    //添加或修改第二个Cookie,该Cookie名为cookieUserPassword,
                    //值为密码框中的内容

                    document.cookie = "cookieUserPassword="+userPassword;

                }

                

                function getCookie(cookieName)

                {

                    //获得Cookie文件中的信息

                    var cookieMesaage = document.cookie;

                    var cookieValue = "";

                    //获得Cookie值

                    if (cookieName=="myName")

                    {

                        cookieValue = returnCookieValue(cookieMesaage, 
                        "cookieUserName")

                        alert("姓名为:"+cookieValue);

                    }

                    else if (cookieName=="myPassword")

                    {

                        cookieValue = returnCookieValue(cookieMesaage, 
                        "cookieUserPassword")

                        alert("密码为:"+cookieValue);

                    }

                }

                

                //该函数用于返回某个Cookie的值

                //cookieValue为整个Cookie文件的内容

                //cookieName为要获得值的Cookie名

                function returnCookieValue(cookieValue,cookieName)

                {

                    //设置返回值

                    var returnCookieValue = "";

                    //查找Cookie名在整个Cookie文件内容中的位置

                    var cookieNameIndex = cookieValue.indexOf(cookie- 
                    Name+"=");

                    

                    //如果在Cookie文件内容中找到Cookie名,则进一步查找该Cookie
                    //的值

                    if (cookieNameIndex!=-1)

                    {

                        //查找Cookie值在Cookie文件内容中的位置。

                        //该位置为Cookie名的位置加上Cookie名的长度,再加上“=”
                        //号的长度,即1

                        var cookieValueBeginIndex = cookieNameIndex + 
                        cookieName.length + 1;

                        //查找Cookie值在Cookie文件内容中的位置。

                        //该位置为从Cookie名的位置开始到第一个“;”为止

                        var cookieVlaueEndIndex = cookieValue.indexOf(";", 
                        cookieValueBeginIndex);

                        

                        //如果从Cookie名的位置开始到整个Cookie文件内容的最后都
                        //没有找到“;”,那么Cookie值的结束位置就是整个Cookie
                        //内容的最后

                        if (cookieVlaueEndIndex==-1)

                        {

                            cookieVlaueEndIndex = cookieValue.length;

                        }

                        //通过Cookie值的开始位置和结束位置获得Cookie值

                        returnCookieValue = cookieValue.substring 
                        (cookieValueBeginIndex,cookieVlaueEndIndex);

                    }

                    //返回Cookie值

                    return returnCookieValue;

                }

            -->

        </script>

    </head>

    <body>

        <form name="myForm">

            姓名:<input type="text" name="myName"><br>

            密码:<input type="password" name="myPassword"><br>

            <input type="button" value="设置Cookie" onclick="setCookie()" 
            ><br>

            <input type="button" value="读取Cookie中的姓名" onclick= 
            "getCookie('myName')">

            <input type="button" value="读取Cookie中的密码" onclick= 
            "getCookie('myPassword')">

        </form>

    </body>

</html>

 

上述代码为光盘目录里“代码\第17章\sample03.htm”的内容。本例修改了代码清单17-1中的代码,添加了两个按钮,单击这两个按钮可以获得不同的Cookie的值。如图17-4为单击【读取Cookie中的姓名】按钮后的结果。

 

图17-4  sample03.htm的运行结果

17.2.4  通过数组来读取Cookie值

除了使用17.2.3小节中的方法读取Cookie值之外,还可以使用数组的方法来读取Cookie值。再看一下在图17-2中,整个Cookie文件中的内容如下所示:

cookieUserName=张三; cookieUserPassword=123456

从以上代码中可以看出,一个Cookie文件中,将不同的Cookie使用“; ”号作为分隔符进行分隔(分号后还有一个空格)。而每个Cookie中,使用“=”作为分隔符,“=”左侧是Cookie名,“=”右侧是Cookie值。那么通过String对象的split()方法,可以很容易将以上代码分割成数组,分割需要分两步进行,步骤如下所示:

(1)使用split(“;”)将整个Cookie内容分割成一个数组,该数组中每个元素都是一个Cookie(包括Cookie名、“=”号、Cookie值)。经过这一步可以得到的数组如下所示:

Arr[0] = "cookieUserName=张三"

Arr[1] = "cookieUserPassword=123456"

(2)从以上代码中可以看出,数组中的每一个元素都包括了Cookie名和Cookie值,这种格式并不利于Cookie值的查询,因此,还需要对Arr[]数组中的每一个元素进行分割。这次分割可以使用split(“=”)方法。然后得到一个二维数组,如以下代码所示:

myArr[0][0] = "cookieUserName"
myArr[0][1] = "张三"
myArr[1][0] = "cookieUserPassword"
myArr[1][1] = "123456"

 

最后,可能通过循环来判断myArr[i][0]的值是否与Cookie名的值相同,如果相同,那么myArr[i][1]的值就是Cookie的值。其具体实现过程如代码清单17-4所示,请注意加粗的文字。

代码清单17-4  精确读取Cookie值

<html>

    <head>

        <title>精确读取Cookie值</title>

        <meta http-equiv="content-type" content="text/html;charset=gb2312">

        <script language="javascript" type="text/javascript">

            <!--

                //设置Cookie

                function setCookie()

                {

                    var userName = myForm.myName.value;

                    var userPassword = myForm.myPassword.value;

                    //添加或修改第一个Cookie,该Cookie名为cookieUserName,值
                    //为“姓名”文本框中的内容

                    document.cookie = "cookieUserName="+userName;

                    //添加或修改第二个Cookie,该Cookie名为cookieUserPassword,
                    //值为密码框中的内容

                    document.cookie = "cookieUserPassword="+userPassword;

                }

                

                function getCookie(cookieName)

                {

                    //获得Cookie文件中的信息

                    var cookieMesaage = document.cookie;

                    var cookieValue = "";

                    //获得Cookie值

                    if (cookieName=="myName")

                    {

                        cookieValue = returnCookieValue(cookieMesaage, 
                        "cookieUserName")

                        alert("姓名为:"+cookieValue);

                    }

                    else if (cookieName=="myPassword")

                    {

                        cookieValue = returnCookieValue(cookieMesaage, 
                        "cookieUserPassword")

                        alert("密码为:"+cookieValue);

                    }

                }

                

                //该函数用于返回某个Cookie的值

                //cookieValue为整个Cookie文件的内容

                //cookieName为要获得值的Cookie名

                function returnCookieValue(cookieValue,cookieName)

                {

                    var returnCookieValue = "";

                    //使用“; ”作为分隔符将整个Cookie内容分隔成数组,此时数组中
                    //的每个元素都是由一个Cookie名、等于号和Cookie值组成的字符串

                    var cookies = cookieValue.split("; ");

                    //定义一个数组,用于存放Cookie名和Cookie值

                    var cookiesValue = new Array();

                    

                    //通过循环将Cookie名和Cookie值放在数组中

                    for (var i=0;i<cookies.length;i++)

                    {

                        //将数组cookies中的每一个元素都分割成数组,此时数组的第
                        //一个元素为Cookie名,第二个元素为Cookie值

                        var tempArr = cookies[i].split("=");

                        //将数组作为元素放在cookiesValue数组中

                        cookiesValue[i] = tempArr;

                    }

                    

                    //通过循环查找Cookie名和Cookie值

                    for (var i=0;i<cookiesValue.length;i++)

                    {

                        //如果数组中的第一个元素值与Cookie名相同,那么数组中的第
                        //二个元素值为Cookie值

                        if (cookiesValue[i][0]==cookieName)

                        {

                            returnCookieValue = cookiesValue[i][1];

                            break;

                        }

                    }

                    return returnCookieValue;

                }

            -->

        </script>

    </head>

    <body>

        <form name="myForm">

            姓名:<input type="text" name="myName"><br>

            密码:<input type="password" name="myPassword"><br>

            <input type="button" value="设置Cookie" onclick="setCookie()" 
            ><br>

            <input type="button" value="读取Cookie中的姓名" onclick= 
            "getCookie('myName')">

            <input type="button" value="读取Cookie中的密码" onclick= 
            "getCookie('myPassword')">

        </form>

    </body>

</html>

 上述代码为光盘目录里“代码\第17章\sample04.htm”的内容。本例修改了代码清单17-3中的代码,使用数组的方式来精确读取Cookie的值,其运行结果与sample03.htm的运行结果相同,读者也可以自己运行该文件查看效果。

分享到:
评论

相关推荐

    cookie读写,子cookie

    2. 获取Cookie:根据键从请求中查找Cookie,并返回其值。 3. 更新Cookie:修改已存在Cookie的值或属性。 4. 删除Cookie:设置Cookie的过期时间为0,使其在浏览器中失效。 例如,一个简单的Cookie工具类可能如下所示...

    cookie之困

    #### 二、Cookie基础 ##### 1. 定义 Cookie 是一种简单的文本格式文件,用于存储用户的偏好设置、登录状态等信息。当用户首次访问网站时,服务器会通过响应头中的`Set-Cookie`字段向客户端发送Cookie信息。之后,...

    关于java应用cookie

    #### 二、Cookie的创建与使用 ##### 1. 创建Cookie对象 在Java中,创建Cookie非常简单。下面的示例展示了如何创建并设置用户名和密码的Cookie: ```java // 创建用户名Cookie对象 Cookie cookieUserName = new ...

    C#操作cookie,解密加密cookie

    在IT领域,尤其是在Web开发中,Cookie的管理与安全至关重要。C#作为一种广泛使用的编程语言,在处理Cookie方面提供了丰富的功能,包括对Cookie的加密与解密。本文将深入探讨如何在C#中操作Cookie,以及如何实现...

    阿里系cookie加密(acw-sc-v2)算法 ZIP包案例为雪球Cookie加密

    雪球是一款财经资讯和社交应用,保护用户数据安全是其重要职责之一,因此使用了这种高级的加密算法来保护用户的cookie信息。 首先,我们来了解一下cookie加密的基本概念。Cookie是网站存储在用户浏览器上的小型文本...

    Cookie浏览器

    2. **登录绕过与免登录机制** - 利用Cookie实现登录绕过:当用户首次登录某个网站并选择“记住我”选项时,服务器会将一个包含登录凭证的Cookie发送给浏览器。下次访问时,只要浏览器发送这个Cookie,服务器就能...

    JAVA之cookie与session

    ### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种在 Web 开发中用于跟踪用户会话的重要技术。它们的主要目标是在客户端和服务端之间保持状态。 - **Cookie** 机制...

    jquery 设置cookie、删除cookie、获取cookie

    2. **设置 Cookie 的值为 null**: - 通过将 Cookie 的值设为 null,并指定路径参数来删除 Cookie。 **示例代码**: ```javascript $.cookie('name', null, { path: '/' }); // 删除名为 'name' 的 Cookie ``...

    browser-cookie 获取浏览器cookie

    - **示例2:** 使用`browser_cookie3`加载Firefox浏览器的cookies。 ```python &gt;&gt;&gt; import browser_cookie3 &gt;&gt;&gt; cj = browser_cookie3.firefox() &gt;&gt;&gt; opener = urllib2.build_opener(urllib2....

    C#cookie实现历史记录

    在C#编程语言中,处理Cookie是构建动态Web应用程序的关键技能之一。本篇将深入探讨如何使用C#来创建、设置、读取和管理Cookie。 首先,Cookie是由服务器端发送到用户浏览器并存储在本地的小型文本文件。它们主要...

    web技术之cookie讲解

    2. 浏览器接收并存储Cookie,通常按照域名进行分类。 3. 当用户再次向同一服务器发送请求时,浏览器会在HTTP请求头的Cookie字段中包含之前存储的Cookie值。 4. 服务器读取Cookie,根据其中的信息做出相应的处理。 ...

    FlashCookie 不被浏览器清除的Cookie

    2. 使用隐私浏览模式,或者限制非必要的Flash内容加载。 3. 定期检查并清理FlashPlayer的本地存储设置,通常可以在Flash Player的控制面板中找到这个选项。 4. 使用隐私增强浏览器插件,这些插件可以帮助用户识别和...

    微信小程序cookie维护插件 实现自动设置获取cookie功能

    2. 合理设置Cookie的生命周期,既不能太短导致频繁登录,也不能太长带来安全风险。 3. 在处理Cookie超时事件时,要确保用户体验流畅,尽量减少对用户操作的干扰。 总之,微信小程序cookie维护插件通过自动化设置和...

    Cookie将用户名和密码加密后存在客户端的Cookie当中

    2. **便捷性**:由于Cookie是自动管理的,用户再次访问网站时无需手动输入凭证信息。 3. **可维护性**:将用户名和密码分开存储,可以简化代码逻辑并提高程序的可维护性。 #### 四、代码解析 根据提供的部分代码...

    cookie记住账号密码

    2. **安全性考虑**: - **安全性和隐私**:不应将敏感信息如明文密码直接存储在Cookie中,而应使用哈希或加密技术处理。同时,设置Secure标志确保Cookie仅通过HTTPS传输,防止中间人攻击。 - **跨站脚本攻击(XSS...

    易语言取设cookie

    2. **`InternetGetCookieA` 函数**: 这个函数用于获取指定URL的Cookie。它的参数包括: - `lpszUrl`:要获取Cookie的URL。 - `lpszCookieName`:如果为NULL,将获取所有Cookie;否则,只获取指定名称的Cookie。 ...

    cookie分析工具

    2. **Cookie类型**:临时Cookie(Session Cookie)在浏览器关闭后消失,而持久Cookie(Persistent Cookie)则在设定的过期日期前一直存在。 3. **Cookie作用**:Cookie主要用于身份验证、跟踪用户行为、保持会话状态...

    获取cookie非常好用的google插件

    标题中的“获取cookie非常好用的google插件”指的是在Google Chrome浏览器上的一种扩展程序,它允许用户方便地管理和操作浏览器中的Cookie数据。Cookie是网站在用户计算机上存储的小型文本文件,用于跟踪用户偏好、...

    cookie接口 实现本地或客户端的cookie的创建和读取

    2. **创建Cookie**: 创建Cookie时,你需要实例化`Cookie`类,然后调用`setName()`设置Cookie的名称,`setValue()`设置其值。例如: ```java Cookie cookie = new Cookie("username", "JohnDoe"); ``` 3. **...

    java 操作cookie

    二、设定 Cookie 生命周期 Cookie 的生命周期可以通过 setMaxAge() 方法来设定。setMaxAge() 方法将 Cookie 的生命周期设置为指定的秒数,如果不设定生命周期,那么 Cookie 将在浏览器关闭时消失。 ```java Cookie...

Global site tag (gtag.js) - Google Analytics