当前位置: 首页 > news >正文

javaWEB总结(17):cookie概述

HTTP协议

HTTP是一种无状态协议,WEB服务器本身不能识别出哪些请求时同一个游览器发出的,游览器的每次请求都是完全孤立的。所以作为WEB服务器,必需采用一种机制来唯一标识一个用户,同时记录该用户的状态。


会话和会话状态


WEB应用中的会话是指一个客户端游览器与WEB服务器之间连续发生的一系列请求和响应过程。WEB应用的会话状态是指WEB服务器与游览器在会话过程中产生的状态信息,借助会话状态,WEB服务器能够把属于同一个会话的一系列请求和响应关联起来。


如何实现有状态的会话

WEB服务器端要能从大量的请求消息中区分出那些请求属于同一个会话,即能区分出来自同一个浏览器的访问请求。这需要浏览器对其发出的每个请求消息都进行标识,属于同一个会话中的请求消息都附带同样的标识符号,而属于不同会话的请求消息总是带不同的标识符号,这个符号就称之为会话ID(SessionID);

在Servlet规范中,常用以下两种机制完成会话跟踪:

1.Cookie

2.Session


Cookie机制

Cookie机制采用的是在客户端保持HTTP状态信息的方案。

Cookie是浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP相应消息头中附带传送给浏览器的一个小文本文件。一旦浏览器保存了某个Cookie,那么它以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。


Cookie的传送过程示意图





如图所示,第一次访问无cookie,第一次响应时服务器给游览器传递了cookie并写入了Cookie存储区。第二次及以后每次请求都会带上这个cookie。



下面是一个demo



目录结构




web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>javaWeb_17</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>

index.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>index</title>
</head>
<body>

	<%
		//1.创建一个Cookie
		Cookie cookie= new Cookie("name","daochuwenziyao");
	
		//2.调用response的addCookie方法,把Cookie传给客户端
		response.addCookie(cookie);
	
	
	
	%>


</body>
</html>

第一次访问



请求中无cookie信息,而相应头中有set-cookie:name=daochuwenziyao ,说明服务器传递给游览cookie.




第二次访问后


请求头中已带有cookie的信息。说明从cookie请求区中拿到了上次的cookie信息。





为了更加直观,我们改变index.jsp文件

(请在IE游览器下执行,其他游览器有运行不成功的状况发生)



index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="false"%>
<!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>index</title>
</head>
<body>

	<%
		
		Cookie[] cookies =request.getCookies();
		
		//有cookie循环打印出来
		if(cookies!=null&&cookies.length>0){

			for(Cookie cookie:cookies){
				
				out.print(cookie.getName()+":"+cookie.getValue());
				out.print("<br>");
			}
		}
		//无cookie
		else{
			
			out.print("没有一个cookie,正在创建cookie^");
			
			//1.创建一个Cookie
			Cookie cookie= new Cookie("name","daochuwenziyao");
		
			//2.调用response的addCookie方法,把Cookie传给客户端
			response.addCookie(cookie);
		}
		
	
	
	
	%>


</body>
</html>

第一次运行




第二次运行






转载于:https://www.cnblogs.com/tongrui/p/6376256.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • flex获得当前player版本信息
  • Struts入门(二) 配置文件的讲解
  • flex rpc 错误整理
  • 提高网页关键词排名的实用方法
  • 疯狂Java讲义(十一)---- 初始化块
  • java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
  • javaweb学习总结(三十六)——使用JDBC进行批处理
  • java数据库设计的14个技巧
  • Population Genetics and Demography Unite Ecology and Evolution
  • 三种不同数据库取前10条记录
  • 算法:正面硬币
  • failed to connect session timed out
  • kylin的状态栏(启动器)改成ubuntu之前的样子
  • java页面抓取代码
  • 【bzoj3730】 震波
  • [NodeJS] 关于Buffer
  • 2017-08-04 前端日报
  • Akka系列(七):Actor持久化之Akka persistence
  • Babel配置的不完全指南
  • ComponentOne 2017 V2版本正式发布
  • linux安装openssl、swoole等扩展的具体步骤
  • Terraform入门 - 1. 安装Terraform
  • TypeScript迭代器
  • 闭包,sync使用细节
  • 代理模式
  • 看域名解析域名安全对SEO的影响
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 王永庆:技术创新改变教育未来
  • 翻译 | The Principles of OOD 面向对象设计原则
  • # dbt source dbt source freshness命令详解
  • #Ubuntu(修改root信息)
  • $(selector).each()和$.each()的区别
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (39)STM32——FLASH闪存
  • (k8s中)docker netty OOM问题记录
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (面试必看!)锁策略
  • (算法)求1到1亿间的质数或素数
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)菜鸟学数据库(三)——存储过程
  • ***详解账号泄露:全球约1亿用户已泄露
  • .describe() python_Python-Win32com-Excel
  • .NET : 在VS2008中计算代码度量值
  • .NET gRPC 和RESTful简单对比
  • .net 发送邮件
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net分布式压力测试工具(Beetle.DT)
  • .NET运行机制
  • .Net中wcf服务生成及调用
  • @AliasFor 使用
  • @Async 异步注解使用