Cookie概述及示例

news/2024/5/18 11:49:11 标签: cookie

------------------------------------Cookie概述及示例-------------------------------------------

  1. Cookie概述

 

  • 什么叫Cookie

Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

 

  • 2 Cookie规范

你大可以放心,Cookie不会占满你的硬盘。因为一个Cookie最多只有4KB,并且浏览器最多可以保存300个Cookie。当然,在浏览器大战的今天,一些浏览器为了打败对手,可能对Cookie规范“扩展”了一些,例如每个Cookie的大小为8KB,最多可保存500个Cookie等!但也不会出现把你硬盘占满的可能!

不同的浏览器之间不能共享Cookie!!!

 

  • 3 Cookie的作用

Cookie的作用可大了,但无论怎么夸大Cookie的作用都离不开“跟踪客户端状态”这句话。我们知道Cookie是服务器保存在客户端的信息,然后客户端会在下次请求时把Cookie在还给服务器,这样服务器就可以通过信息来识别客户端了。

代码示例:

public class RegistServlet extends HttpServlet {

 

       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

              request.setCharacterEncoding("UTF-8");

              //获取用户名和密码

              String username = request.getParameter("username");

              String password = request.getParameter("password");

             

              System.out.println("用户名:"+username);

              System.out.println("密码:"+password);

              //将用户和密码赋给regist属性

              request.setAttribute("username",username);

              request.setAttribute("passward",password);

              //如果跳转到regist1.html页面,这时当前servlet的request作用就消失了

              //如果跳转到的是servlet,那么当前servlet的request域作用继续存在

              request.getRequestDispatcher("/regist1.html").forward(request, response);

       }

}

 

public class Regist1Servlet extends HttpServlet {

 

       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

              //获得性别

              String gender = request.getParameter("gender");

              //获得职位

              String job = request.getParameter("job");

              //获得用户和密码

              String username = (String)request.getAttribute("username");

              String password = (String)request.getAttribute("password");

             

              switch(gender){

                     case "1" :

                            gender="男";

                            break;

                     case "2" :

                            gender="女";

                            break;

              }

             

              switch(job){

                     case "1" :

                            job="讲师";

                            break;

                     case "2" :

                            job="构架师";

                            break;

              }

              //设置response的类型和编码

              response.setCharacterEncoding("UTF-8");

              response.setContentType("text/html;charset=UTF-8");

              //打印到页面上

              response.getWriter().println("<h1>注册成功</h1>");

              response.getWriter().println("<hr>");

              response.getWriter().println("用户名:"+username+"<br>");

              response.getWriter().println("密码:"+password+"<br>");

              response.getWriter().println("性别:"+gender+"<br>");

              response.getWriter().println("职位:"+job+"<br>");

              //因为当前servlet中的request是新的对象,所以是获取不到上一个servlet的request属性

              //那么用户名和密码打印为null

             

       }

 

}

 

 

2 Cookie的示例

  • 保存Cookie到客户端

这是响应工作的一部分,所以这个方法是response对象的。并且Cookie是HTTP协议中的内容,所以保存Cookie是HttpServletResponse类的方法。

void addCookie(Cookie c):添加Cookie对象到当前response对象中,这个方法可以被调用多次,从而完成添加多个Cookie对象到response中。

public class AServlet extends HttpServlet {

    public void doGet(HttpServletRequest request,

           HttpServletResponse response)

           throws ServletException, IOException {

       Cookie c = new Cookie("name", "renliang");

       response.addCookie(c);

    }

}

 

  使用浏览器访问http://localhost/day06_03/AServlet,然后通过HttpWatch查看响应头信息中是否存在Set-Cookie这个头信息。

  当再交方法http://localhost/day07_03/AServlet时,查看请求头信息中是否存在Cookie这个头信息。当然也可以尝试访问http://localhost/day07_03/BServlet是否在请求头中存在Cookie这个头信息。

 

尝试访问http://localhost/day07_03/BServlet,你可能会说,BServlet不存在,没错,BServlet是不存在,但我们只关心请求,而不关心响应。我们只需要看看在请求中是否存在Cookie这个头信息。你应该已经尝试过了,也看到了Cookie请求头信息。这说明不只是访问AServlet才会有Cookie请求头信息,而是只要访问这个day07_03就会有Cookie这个请求头。

Cookie的大小是有限的,浏览器最多可以保存300个Cookie,一个Cookie最多只有4KB,如果超出最大容量就会报如下错误。

 

 

 

  • 服务器端读取Cookie

我们现在已经可以保存Cookie到客户端了,但还没有学习让服务器如何读取Cookie。

如果浏览器保存了Cookie,那么会在下一次请求时把Cookie放到请求头中发送给服务器,这时服务器需要在请求中读取Cookie。既然是在请求中读取,那么当然是使用request对象来读取了。

HttpServletRequest:Cookie[] getCookies()

注意,它返回的是Cookie数组,而不是一个Cookie对象。如果请求中没有Cookie,那么该方法返回null。

       Cookie[] cs = request.getCookies();

       if (cs != null) {

           for (Cookie c : cs) {

              String str = c.getName() + ": " + c.getValue() + "<br/>";

              response.getWriter().print(str);

           }

       }

 

Cookie存写代码示例:

RegistServlet存储cookie

public class RegistServlet extends HttpServlet {

 

       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

              request.setCharacterEncoding("UTF-8");

              //获取用户名和密码

              String username = request.getParameter("username");

              String password = request.getParameter("password");

             

              System.out.println("用户名:"+username);

              System.out.println("密码:"+password);

             

              //创建cookie对象,将用户名和密码连接存储,使用逗号分开

              Cookie cookie = new Cookie("userpass", username+","+password);

             

              //把cookie写入浏览器

              response.addCookie(cookie);

             

              //跳转页面

              request.getRequestDispatcher("/regist1.html").forward(request, response);

       }

 

}

RegistServlet1读取cookie

public class Regist1Servlet extends HttpServlet {

 

       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

              //获得性别

              String gender = request.getParameter("gender");

              //获得职位

              String job = request.getParameter("job");

             

              //从浏览器中来读取当前项目的所有cookie

              Cookie[] cookies = request.getCookies();

              String userpassVal = null;

              //遍历cookies

              for (Cookie cookie : cookies) {

                     //获取cookie的name

                     String cookieName = cookie.getName();

                     if("userpass".equals(cookieName)){

                            //获得cookie的值

                            userpassVal = cookie.getValue();

                     }

              }

             

              String username = null;

              String password = null;

              if(userpassVal != null){

                     //将用户密码字符串进行分割

                     String[] upValues = userpassVal.split(",");

                     //将分割后的字符串数组赋给相对应的用户和密码

                     username = upValues[0];

                     password = upValues[1];

              }

             

              switch(gender){

                     case "1" :

                            gender="男";

                            break;

                     case "2" :

                            gender="女";

                            break;

              }

             

              switch(job){

                     case "1" :

                            job="讲师";

                            break;

                     case "2" :

                            job="构架师";

                            break;

              }

              //设置response的类型和编码

              response.setCharacterEncoding("UTF-8");

              response.setContentType("text/html;charset=UTF-8");

              //打印到页面上

              response.getWriter().println("<h1>注册成功</h1>");

              response.getWriter().println("<hr>");

              response.getWriter().println("用户名:"+username+"<br>");

              response.getWriter().println("密码:"+password+"<br>");

              response.getWriter().println("性别:"+gender+"<br>");

              response.getWriter().println("职位:"+job+"<br>");

       }

}

 

360浏览器查看存储的cookie

 


http://www.niftyadmin.cn/n/1564422.html

相关文章

cookie的生命周期

---------------------------- cookie的生命周期----------------------------------- Cookie的生命周期 Cookie会在客户端存活多久呢&#xff1f;这就是Cookie的生命了。默认情况下&#xff0c;Cookie只在浏览器的内存中存活&#xff0c;也就是说&#xff0c;当你关闭浏览器…

浏览器管理cookie

-----------------------------浏览器管理cookie--------------------------- 下面是浏览器查看Cookie的试&#xff1a; FireFox查看Cooke&#xff1a;Google查看Cookie&#xff1a;Win7系统ie上的位置C:\Users\renliang\AppData\Local\Microsoft\Windows\Temporary Internet…

加了2个皮肤的art dialog

/Files/Silvia/artDialog.rar转载于:https://www.cnblogs.com/Silvia/archive/2012/09/05/2671432.html

cookie的路径

------------------------------- cookie的路径------------------------------------- Cookie的路径 Cookie还有一个path属性&#xff0c;可以通过Cookie#setPath(String)方法来设置。你可以使用HttpWatch查看响应中的Set-Cookie中是否存在路径。下面是通过FireFox查看Cooki…

(八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据

&#xff08;八大方法、逐层深入&#xff0c;有你一定没见过的&#xff09;使用INSERT语句向表中插入数据&#xff08;MSSQLSERVER版&#xff09;做开发的同仁对于向数据库中插入数据可谓是太普通不过了&#xff0c;也没什么说的&#xff0c;一般都是采用常用的INSERT INTO [(字…

CentOS下安装JDK的三种方法

由于各Linux开发厂商的不同,因此不同开发厂商的Linux版本操作细节也不一样,今天就来说一下CentOS下JDK的安装:方法一&#xff1a;手动解压JDK的压缩包&#xff0c;然后设置环境变量1.在/usr/目录下创建java目录[rootlocalhost ~]# mkdir/usr/java [rootlocalhost ~]# cd /usr/j…

cookie中保存中文

-------------------------------- cookie中保存中文-------------------------------- Cookie中保存中文 Cookie中保存中文&#xff0c;次要。 Cookie中是不可以设置中文的&#xff0c;但可以使用URLEncodor.encode()方法编码后在存放到Cookie中。在获取Cookie时&#xff0c…

Windows Phone实用开发技巧(37):创建一个全局播放器

在做windows phone 开发的时候&#xff0c;有时候我们需要在某些页面中进行声音的播放。而播放的方式也有多种&#xff1a; 1. 使用MediaElement 2. 使用SoundEffect 3. 使用后台播放 SoundEffect只能播放wav格式的文件&#xff1b;后台播放可以在程序退出后仍然继续播放&#…