会话跟踪之Cookie
一:简介
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的更多相关文章
- 会话跟踪session cookie
会话跟踪 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在 ...
- Javaweb学习笔记——(十一)——————JSP、会话跟踪、Cookie、HttpSession
JSP1.什么是JSP jsp即java server pages,它是Javaweb的动态资源. jsp = html + java脚本 + jsp动态标签(包含EL表达式)2.JSP中java脚本 ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- 会话跟踪之Cookie技术
1. Cookie会话跟踪技术介绍 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,可以在客户 ...
- 简述会话跟踪技术——Cookie和Session
简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...
- 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例
目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...
- 会话跟踪技术——cookie
一.会话控制 为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,我们需要一种强有力的解决方案,这样就产生了会话控制. HTTP是一个无状态的协议,此协议无法来维护两个事务之 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 创建Cookie
Tomcat作为Web服务器,对Cookie提供了良好的支持.那么,运行在Tomcat的Servlet该如何访问Cookie呢?幸运的是,Servlet无需直接和HTTP请求或响应中的原始Cookie ...
- Cookie&Session会话跟踪技术
今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...
随机推荐
- 【MySQL】MySQL悲观锁 + 事物 + for update 解决普通流量并发的问题
使用mysql悲观锁解决并发问题 最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事 ...
- Entity Framework Code-First(6):Database Initialization
Database Initialization: We have seen that Code First creates a database automatically in the Simple ...
- JavaScript学习系列5 ---ES6中的var, let 和const
我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...
- Spring 属性配置
此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 随着Spring的不断发展与完善,早期它的功能可能只看做是IOC(反转控制)的容器,或者其最大的亮点为DI( ...
- vs2013使用git报错
之前使用的是个人git账号,先转换为公司git账号,在同步时报Response status code does not indicate success: 403 (Forbidden) 上述问题是 ...
- Unity3D -- shader光照常用函数和变量
上一篇记录了shader常用函数和变量,这篇记录一些光照计算时常用函数和变量 1.内置的光照变量 _LightColor0 float4 //该Pass处理的逐像素光源的颜色 _WorldSpaceL ...
- 搭建一个简单的FTP服务器
本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...
- springIOC源码解析之Bean的创建
上一篇讲到了beanFactory的配置文件的解析和beanFactory的创建,都集中到了obtainFreshBeanFactory();这一句代码里了,本篇主要讲bean的创建过程 public ...
- Shell操作相关的快捷键 --Linux
一.shell和bash shell --unix --Bourne shell ,bash --linux --Bourne again shell.bash (GNU Bourne-Again S ...
- 关系型数据库基础概念:MySQL系列之开篇
一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...