一:简介

  Cookie主要用来存储用户信息,追踪用户会话。web客户端访问服务端直接采用的协议是Http,Http协议是一种无状态协议,无状态表现在不能够保留用户访问状态,无法记录用户信息。每一次的请求,在响应后就会断开,再次访问的时候就会是一个新的请求。比如用户A访问了一次服务,再次访问的时候服务端无法得知该用户是否还是A,它会当做是一个新的用户。为了解决这一问题,产生了Cookie。

用户首次访问的时候,服务端会记录该用户的信息(或者说身份凭证),当再次访问服务的时候,服务端要求客户端携带用户信息,服务端进行确认。辨别出是哪个用户,哪个会话。

    Cookie中是以键值对的方式存储信息的。它并没有提供专门的修改和删除Api,往往要达到这个功能,需要重新定义同名称的Cookie值进行覆盖[更新]、如果是删除操作,那么不仅要定义一个同名的Cookie,并且需要吧maxAge设置为0,表明该Cookie的有效期为0[即代表删除]。

二:属性列表

三:Cookie的不可跨域性

  同一个浏览器,访问不同的网址(服务器),如一个访问百度,一个访问谷歌,可能两个服务都需要Cookie信息。但是你在后端服务中操作Cookie的时候,百度的只能操作百度的Cookie;谷歌仅能操作谷歌的Cookie,两者是不会交叉的。原因是浏览器已经对其进行了区分,依据的就是域名。比如:www.google.com和www.image.google.com两个虽然都是google旗下的,但是也属于不同的域名,所以Cookie也是不同的。【但是反过来说,你如果访问了Google的某个产品,然后进行了登录操作。那么再访问其他Google产品的时候不用进行登录则可以直接进行操作,关键是调整了domain属性】

四:代码演示

  本例演示利用Cookie保存用户信息,并记录网站的访问次数:

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<%
//设置请求和响应的编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); if("POST".equals(request.getMethod())){
//保存Cookie信息
Cookie nameCookie = new Cookie("username",request.getParameter("name"));
Cookie visitTimesCookie = new Cookie("visitTimes","0"); response.addCookie(nameCookie);
response.addCookie(visitTimesCookie); //记录用户信息完毕,重定向到cookie.jsp
response.sendRedirect("./cookie.jsp"); return;
}
%>
<!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>登录界面</title>
</head>
<body>
<form action="./login.jsp" method="POST">
<table>
<!-- 输出错误信息 -->
<tr>
<td colspan="2"><%=exception.getMessage()%></td>
</tr>
<tr>
<td>账号:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pwd"></td>
</tr>
</table>
<input type="submit" value="登录">
</form>
</body>
</html>

cookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page errorPage="./login.jsp" %>
<%
//设置请求和响应的编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); Cookie[] cookies = request.getCookies(); String username = "";
int visitTimes = 0; for(int i=0;i<cookies.length;i++){
//获取单个Cookie
Cookie cookie = cookies[i];
System.out.println(cookie);
if("username".equals(cookie.getName())){
//获取用户名
username = cookie.getName();
}else if("visitTimes".equals(cookie.getName())){
visitTimes = Integer.parseInt(cookie.getValue());
} if(username==null || username.trim().equals("")){
//抛出异常,则跳转到error界面[login.jsp]
throw new Exception("您还没有登录,请先登录!");
}
} //修改Cookie信息,更新访问次数,覆盖Cookie中的visitTimes字段
Cookie newCookie = new Cookie("visitTimes",String.valueOf(++visitTimes));
//设置Cookie
response.addCookie(newCookie);
%>
<!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>会话跟踪:跟踪用户的整个会话</title>
</head>
<body>
<h4>登录信息</h4>
<hr>
<span>您的账号:</span><span><%=username %></span><br>
<span>访问次数:</span><span><%=visitTimes %></span><br>
<button onclick="refresh()">刷新</button>
<script type="text/javascript">
function refresh(){
var time = new Date().getTime();
window.location.href='./cookie.jsp?ts='+time;
}
</script>
</body>
</html>

会话跟踪之Cookie的更多相关文章

  1. 会话跟踪session cookie

    会话跟踪 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在 ...

  2. Javaweb学习笔记——(十一)——————JSP、会话跟踪、Cookie、HttpSession

    JSP1.什么是JSP jsp即java server pages,它是Javaweb的动态资源. jsp = html + java脚本 + jsp动态标签(包含EL表达式)2.JSP中java脚本 ...

  3. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  4. 会话跟踪之Cookie技术

    1. Cookie会话跟踪技术介绍 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,可以在客户 ...

  5. 简述会话跟踪技术——Cookie和Session

    简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...

  6. 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例

    目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...

  7. 会话跟踪技术——cookie

    一.会话控制 为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,我们需要一种强有力的解决方案,这样就产生了会话控制. HTTP是一个无状态的协议,此协议无法来维护两个事务之 ...

  8. IT兄弟连 JavaWeb教程 Servlet会话跟踪 创建Cookie

    Tomcat作为Web服务器,对Cookie提供了良好的支持.那么,运行在Tomcat的Servlet该如何访问Cookie呢?幸运的是,Servlet无需直接和HTTP请求或响应中的原始Cookie ...

  9. Cookie&Session会话跟踪技术

    今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...

随机推荐

  1. 03_android日志猫的使用

    在java基础的时候如果想调试程序打一下日志,用的是System.out.println();. 控制台输出的其实不是咱们的日志,而是我把整个项目的部署到设备上.控制台输出的是这个东西.Uploadi ...

  2. (补)Java解析XML之dom4j

    上次记得忘了记最流行的dom4j方法了,用的还是上次的那个XML文件 注:需要添加dom4j.jar文件 package com.xujingyang.dom4j; import org.dom4j. ...

  3. 11、scala类型参数

    一.类型参数1 1.介绍 类型参数是什么?类型参数其实就类似于Java中的泛型.先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题, ...

  4. 一款Regular expression在线检测工具

    记录下我自己使用的一款正则表达式使用工具 https://regex101.com/ 输入正则表达式后,可以在下面的“TEST STRING”中来测试对应的字符串是否满足该正则表达式 个人觉得非常好用

  5. 【Qt官方例程学习笔记】Analog Clock Window Example (画笔的平移/旋转/缩放应用)

    这个例子演示了如何使用QPainter的转换和缩放特性来简化绘图. 值得学习的: 定时器事件ID检查: 在定时器事件中检查定时器id是比较好的实践. QPainter抗锯齿: We call QPai ...

  6. git branch简单使用

    1,branch的建立及使用git clone user@192.168.0.136:/media/projiect/omap4/nexttab/kernel kernel/android3.0/  ...

  7. 【本人译作推荐】Windows 8应用开发:C#和XAML卷(原名:Building Windows 8 Apps with C# and XAML)

    [图书推荐] 译名:Windows 8应用开发:C#和XAML卷 原名:Building Windows 8 Apps with C# and XAML   编辑推荐 国内第一本使用XAML与C#语言 ...

  8. 《Linux内核设计与实现》读书笔记(三)- Linux的进程

    进程是所有操作系统的核心概念,同样在linux上也不例外. 主要内容: 进程和线程 进程的生命周期 进程的创建 进程的终止 1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理 ...

  9. 初始Java虚拟机

    Java虚拟机内存模型(Java运行在虚拟机之上,虚拟机帮Java屏蔽底层的指令集,让Java能够跨平台运行) 内存模型以及分区,需要详细到每个区放什么? 方法区(method area): 方法信息 ...

  10. MarkDown折叠语法

    1.语法代码 程序员的本质 程序的进阶和优化 1.简化人的操作,更少的代码做更多的事情 2.节省时间效率,在更短的时间内做更多的事情 3.占用内存,占更少的内存做更多的事情 <details&g ...