会话跟踪之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 ...
随机推荐
- shell脚本监控MySQL主从同步
企业面试题1:监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员. 阶段1:开发一个守护进程脚本每30秒实现检测一次. 阶段2:如果同步出现如下错误号(1158,1159,1008, ...
- SAP 销售订单中采购标识无法修改
VA03中的销售订单第四个物料没有ZA选项, 错误提示:计划行类别ZA未定义 原因: MM03中的 MRP2---采购类型未被定义
- Material使用07 MdGridListModule的使用
1 MatGridListModule简介 对相似数据的展现,尤其是像是图片的展示 使用起来很像表格 官方文档:点击前往 2 MatGridListModule提供的指令 2.1 mat-grid-l ...
- The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object
The project was not built since its build path is incomplete. Cannot find the class file for java.la ...
- Access denied for user 'xxx'@'localhost' 问题的解决方法
使用SpringMvc + Mybatis + Mysql搭建的架构,调试时出现了以下错误: HTTP Status 500 - Request processing failed; nested e ...
- java String编码转换
/** * Get XML String of utf-8 * * @return XML-Formed string */ public static String getUTF8XMLString ...
- sql获取当日减去几天的几天前日期
CONVERT(varchar(10),DATEADD(DAY, -220 ,CONVERT(nvarchar(10),getdate(),23)),23)
- sqlachemy知识点
mysql语句 1.GROUP BY基本语法格式: GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...
- 递归实现从n个数中选r个数的组合数
#include <stdio.h> #include <stdlib.h> ], count; void comb(int m, int k) { int i, j; for ...
- Delphi Runtime Library在哪里?
Delphi Runtime Library是Delphi的运行时库,里面包含了大部分Delphi库的代码,这些库代码在哪里呢?其实正常安装完Dephi之后,在它的安装目录下面!下面我以我的Delph ...