一、什么是Cookie
Cookie是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.
客户端浏览器会把Cookie保存起来.当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器.
服务器检查该Cookie,以此来辨认用户状态.服务器还可以根据需要修改Cookie的内容.
查看某个网站颁发的Cookie很简单:
javascript:alert(document.cookie)
二、练习
Cookie.jsp
login.jsp
三、Cookie的不可跨域名性
Cookie具有不可跨域名性.根据Cookie规范,浏览器访问某个网站只会携带该网站的Cookie,而不会携带别的网站的Cookie.
需要注意的是:虽然网站images.google.com和www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie.
四、Unicode编码:保存中文
中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中占2个字节.
Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码.
编码可以使用java.net.URLEncoder类的 encode(String str,String encoding)方法.
解码使用java.net.URLDecoder类的decode(String str,String encoding)方法.
Cookie是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.
客户端浏览器会把Cookie保存起来.当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器.
服务器检查该Cookie,以此来辨认用户状态.服务器还可以根据需要修改Cookie的内容.
查看某个网站颁发的Cookie很简单:
javascript:alert(document.cookie)
二、练习
Cookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="login.jsp" %> <%@ page import="javax.servlet.http.*"%> <% request.setCharacterEncoding("UTF-8"); //设置request编码 String username = ""; //用户名 int visitTimes = 0; //访问次数 Cookie[] cookies = request.getCookies(); //所有的Cookie for(int i=0; cookies!=null&&i<cookies.length;i++){ //遍历Cookie寻找账号与登录次数 Cookie cookie = cookies[i]; //第i个Cookie if("username".equals(cookie.getName())){ //如果Cookie名为Username System.out.println(cookie.getValue()); username = cookie.getValue(); //则记录该Cookie的内容 }else if("visitTimes".equals(cookie.getName())){ //如果Cookie名为visitTimes visitTimes = Integer.parseInt(cookie.getValue()); //则记录Cookie的内容 } } if(username == null || username.trim().equals("")){ //如果没有找到用户名,则转到登录界面 throw new Exception("您还没有登录,请先登录."); } //修改Cookie,更新用户的访问次数 Cookie visitTimesCookie = new Cookie("visitTimes",Integer.toString(++visitTimes)); response.addCookie(visitTimesCookie); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie.jsp</title> </head> <body> <div align="center" style="margin:10px;"> <fieldset> <legend>登录信息</legend> <form action="login.jsp" method="post"> <table> <tr> <td>您的账号:</td> <td><%= username%></td> </tr> <tr> <td>登陆次数:</td> <td><%= visitTimes%></td> </tr> <tr> <td></td> <td> <input type="button" value="刷新" onclick="location='<%= request.getRequestURI() %>?ts=' + new Date().getTime();" class="button"> </td> </tr> </table> </form> </fieldset> </div> </body> </html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <% request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); if("POST".equals(request.getMethod())){ Cookie usernameCookie = new Cookie("username",request.getParameter("username")); //Cookie visittimesCookie = new Cookie("visitTimes","0"); response.addCookie(usernameCookie); //response.addCookie(visittimesCookie); //System.out.println(visittimesCookie.getValue()); response.sendRedirect(request.getContextPath() + "/cookie.jsp"); return; } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>login.jsp</title> </head> <body> <div align="center" style="margin:10px;"> <fieldset> <legend>登录</legend> <form action="login.jsp" method="POST"> <table> <tr> <td></td> <td> <span style="color:red; "> <%= exception.getMessage() %> </span> </td> </tr> <tr> <td>账号:</td> <td> <input type="text" name="username" style="width:200px; "> </td> </tr> <tr> <td>密码:</td> <td> <input type="password" name="password" style="width:200px; "> </td> </tr> <tr> <td></td> <td> <input type="submit" value="登录" class="button"> </td> </tr> </table> </form> </fieldset> </div> </body> </html>
三、Cookie的不可跨域名性
Cookie具有不可跨域名性.根据Cookie规范,浏览器访问某个网站只会携带该网站的Cookie,而不会携带别的网站的Cookie.
需要注意的是:虽然网站images.google.com和www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie.
四、Unicode编码:保存中文
中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中占2个字节.
Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码.
编码可以使用java.net.URLEncoder类的 encode(String str,String encoding)方法.
解码使用java.net.URLDecoder类的decode(String str,String encoding)方法.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.net.URLDecoder"%> <%@page import="java.net.URLEncoder"%> <% //使用中文的Cookie. name与value都使用UTF-8编码 Cookie cookie = new Cookie(URLEncoder.encode("姓名","UTF-8"), URLEncoder.encode("刘京华","UTF-8")); response.addCookie(cookie); //发送到客户端 %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie Encoding</title> </head> <body> <% Cookie[] cookie1 = request.getCookies(); if(cookie1 != null){ for(Cookie cc : cookie1){ String cookieName = URLDecoder.decode(cc.getName(),"UTF-8"); String cookieValue = URLDecoder.decode(cc.getValue(),"UTF-8"); out.println(cookieName + "=" + cookieValue + "; <br/>"); } }else{ out.println("Cookie 已经写入客户端.请刷新页面."); } %> </body> </html>
发表评论
-
JSP九大内置对象之--------Request对象学习笔记
2012-07-17 17:23 983Request内置对象 Request是最常用的内置对象,表 ... -
CSS零基础学习笔记(三)
2012-04-18 11:18 1087CSS属性: 1、文本与字体属性 2、列表属性 3、浮动属性 ... -
CSS零基础学习笔记(二)
2012-04-17 22:49 1134使用CSS样式控制页面的方法包括: 1、行内样式 2、内嵌样式 ... -
CSS零基础学习笔记(一)
2012-04-17 16:56 1232为什么需要样式表? 1、HTML标签的外观样式比较单一 2、样 ... -
HTML零基础学习笔记(三)
2012-04-15 16:26 844表单的语法: <form a ... -
HTML零基础学习笔记(二)
2012-04-15 15:34 1144XHTML标签规范: 1、标签名和属性名称必须小写 2、HTM ... -
HTML零基础学习笔记(一)
2012-04-15 13:18 1074html学习笔记: ①什么是HTML? 超文本标记语言,即H ... -
初识字节流----FileOutputStream
2012-04-05 10:19 1138import java.io.FileOutputStre ... -
初识字节流----FileInputStream
2012-04-05 10:04 1358import java.io.FileInputStrea ... -
初识Socket
2012-04-03 11:19 999客户端: package Socket_Test; ... -
初识JDBC
2012-04-03 11:12 1006package com.pb.ted; import ...
相关推荐
### 学习cookie的笔记和总结 #### 一、什么是Cookie? Cookie是一种小型的数据文件,由服务器发送到用户的浏览器,并存储在用户计算机上的一种机制。它主要用于保存用户的偏好设置、登录状态等信息,以便用户再次...
这篇学习笔记将深入探讨它们的工作原理、使用场景以及优缺点。 **Cookie** Cookie是一种在客户端(用户的浏览器)和服务器之间传递信息的技术。服务器在响应中设置Cookie,浏览器在后续的请求中携带Cookie返回。...
**J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...
本学习笔记将深入探讨ASP.NET的核心概念、开发工具、语法特性以及常见应用场景。 首先,ASP.NET的核心组成部分包括ASP.NET Web Forms、ASP.NET MVC、ASP.NET Web Pages和ASP.NET Core。Web Forms提供了事件驱动的...
这份"ASP.NET4学习笔记"包含了多个部分,旨在帮助学习者深入理解该技术的核心概念和实际应用。 1. **基础概念**:笔记可能首先介绍了ASP.NET 4的基本架构和工作原理,包括页面生命周期、控件事件模型以及服务器控件...
Cookie是一种存储在用户计算机上的文本文件,由Web服务器创建,并可以被同一服务器的页面读取。它是一种网络技术,可以用来存储和跟踪访问者在网站上的活动。Cookie的主要功能可以概括为: 1. 记录用户信息:包括...
**林学良Jsp&Servlet学习笔记**: 这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们...
本文将详细介绍 Python 爬虫学习笔记的知识点,涵盖爬虫基础、网络和前端基础、Requests 模块、请求头、GET 和 POST 请求、代理、Cookie 模拟登录、Quote 和 Unquote、登录和获取 Cookie、Post 和 Session、重试机制...
【httpservletRequest的学习笔记】 在Java Web开发中,HttpServletRequest接口是Servlet API的核心组成部分,它用于封装客户端发送到服务器的HTTP请求。理解HttpServletRequest的工作原理对于任何Servlet开发者来说...
Web安全学习笔记——Web-Sec Documentation是一份详细的知识库,旨在帮助读者理解并掌握Web安全相关的理论和技术。文档首先从Web技术的演化、网络攻防技术的发展以及网络安全观的演变三个方面进行阐述,让读者对Web...
### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...
### ASP.NET 学习笔记概览 本学习笔记主要记录了作者在学习ASP.NET过程中的关键知识点与实践心得,旨在帮助初学者更好地理解和掌握ASP.NET的基本概念和技术要点。 ### 1. 关于页面关闭与PostBack - **页面关闭**:...
2. **第二次请求**:这次请求包含了两个Cookie,其中一个是与第一次请求相同的Cookie,另一个是由第一次请求返回的JavaScript代码生成的新Cookie。 3. **第三次请求**:此次请求包含了前两次请求的所有Cookie信息,...
其中,JavaScript动态生成Cookie是一种常见的实现方式。因此,如何逆向解析这些加密的Cookie成为了许多开发者关注的问题。 #### 三、逆向分析步骤详解 1. **获取HTML文档**:首先通过正常途径获取到目标页面的HTML...
【PHP学习笔记】 在深入PHP之前,我们先回顾一下HTML的一些基础知识点。`<hr>`标签用于在HTML页面中创建一条水平线,起到分隔内容的作用。`target="_blank"`属性用于链接,当点击链接时会在新窗口打开目标页面。在...
### Java Web 学习笔记:Servlet 的核心概念与应用 #### 一、Servlet 概述 Servlet 是 Java Web 开发中的重要组成部分,主要用于处理客户端发送到服务器端的 HTTP 请求,并生成响应结果返回给客户端。通过学习 ...
本学习笔记中的代码示例将引导你完成从零开始搭建一个具备用户认证和授权功能的Spring Boot项目,通过实际操作加深对Shiro的理解和应用。 总的来说,Apache Shiro是一个功能全面的Java安全框架,它简化了安全开发的...
【JavaEE学习项目源代码及学习笔记.zip】这个压缩包包含了一系列关于JavaEE技术栈的实践项目源码和对应的学习笔记,旨在帮助开发者深入理解JavaEE的各项核心技术。下面将逐一介绍这些子文件所涵盖的JavaEE知识点。 ...
### JAVA学习笔记1:深入解析J2EE框架与关键技术 #### J2EE模式与Value Object概念 在JAVA学习之旅中,深入理解J2EE(Java 2 Platform, Enterprise Edition)框架是至关重要的一步。J2EE是专为开发企业级应用而...