`
阿尔萨斯
  • 浏览: 4204208 次
社区版块
存档分类
最新评论

【WEB】会话_Cookies

 
阅读更多

什么是会话?

在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

会话过程中要解决的一些问题?

每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据。

例如:多个用户点击超链接通过一个servlet各自购买了一个商品,服务器应该想办法把每一个用户购买的商品保存在各自的地方,以便于这些用户点结帐servlet时,结帐servlet可以得到用户各自购买的商品为用户结帐。

这些数据保存在request或servletContext中不行


保存会话数据的两种技术:

  1. Cookie
    • Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
  2. Session
    • Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。


COOKIE技术


  • Cookie是一种在客户端保持HTTP状态信息的技术,它好比商场发放的优惠卡。
  • Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。
  • 一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这个Cookie回传给WEB服务器。
  • WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。



Cookie API

javax.servlet.http.Cookie类用于创建一个Cookie

response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段

request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。

Cookie类的方法:

public Cookie(String name,String value)

setValue与getValue方法

setMaxAge与getMaxAge方法

setPath与getPath方法

setDomain与getDomain方法

getName方法

Set-Cookie:username=qiujy;Domain=localhost;path=/

Cookie:username=qiujy;$Path=/jsp_04_servlet




Cookie细节

  • 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
  • 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
  • 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
  • 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
  • 注意,删除cookie时,path必须一致,否则不会删除
Cookie应用

显示用户上次浏览过的商品


显示上次浏览过的商品的详细过程


创建cookie

package com.hbsi.cookies;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookiesDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		//当客户端访问servlet时,服务器向客户端写cookie
		//1.在服务器端创建一个cookie
		Cookie cookie = new Cookie("username","zhangsan");
		//2.设置cooki的存活时间,如果不设置,cookie不保存
		cookie.setMaxAge(7*24*60*60);
		//3.将cookie写到客户端
		response.addCookie(cookie);
		out.print("已经创建了cookie");

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}


创建两个cookie

package com.hbsi.cookies;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookiesDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		createCookie(response);

	}

	private void createCookie(HttpServletResponse response) throws IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		//当客户端访问servlet时,服务器向客户端写cookie
		//1.在服务器端创建一个cookie
		Cookie cookie = new Cookie("username","zhangsan");
		Cookie cookie1 = new Cookie("password","aaa");
		//2.设置cooki的存活时间,如果不设置,cookie不保存
		cookie.setMaxAge(7*24*60*60);
		cookie1.setMaxAge(7*24*60*60);
		//3.将cookie写到客户端
		response.addCookie(cookie);
		response.addCookie(cookie1);
		out.print("已经创建了cookie");
		out.print("已经创建了cookie1");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}



获取cookie

package com.hbsi.cookies;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookiesDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Cookie[] cookies = request.getCookies();
		for(int i=0; cookies!=null && i<cookies.length;i++){
			out.print(cookies[i].getValue());
		}
	}

	private void createCookie(HttpServletResponse response) throws IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		//当客户端访问servlet时,服务器向客户端写cookie
		//1.在服务器端创建一个cookie
		Cookie cookie = new Cookie("username","zhangsan");
		Cookie cookie1 = new Cookie("password","aaa");
		//2.设置cooki的存活时间,如果不设置,cookie不保存
		cookie.setMaxAge(7*24*60*60);
		cookie1.setMaxAge(7*24*60*60);
		//3.将cookie写到客户端
		response.addCookie(cookie);
		response.addCookie(cookie1);
		out.print("已经创建了cookie");
		out.print("已经创建了cookie1");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}



package com.hbsi.cookies;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookiesDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("您上次访问的时间是:");
		
		//获取客户的cookie信息
		Cookie[] cookies = request.getCookies();
		for(int i=0; cookies != null && i<cookies.length;i++){
			if(cookies[i].getName().equals("lastAccessTime")){
				long value = Long.parseLong(cookies[i].getValue());
				Date date = new Date(value);
				out.print(date);
			}
			
		}
		//把新的访问时间写给客户,保存到cookie中
		Cookie cookie =  new Cookie("lastAccessTime", System.currentTimeMillis()+"");
		cookie.setMaxAge(30*24*3600);
		cookie.setPath("/web");
		response.addCookie(cookie);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

}



分享到:
评论

相关推荐

    解析HTML5的存储功能和web SQL的相关操作方法

    每个 HTTP 请求中都包含 Cookies,从而导致传输相同的数据减缓我们的 Web 应用程序。 每个 HTTP 请求中都包含 Cookies,从而导致发送未加密的数据到互联网上。 Cookies 只能存储有限的 4KB 数据,不足以存储所需的...

    cookies_and_sessions_lab-seattle-web-091619

    Cookie和会话实验室客观的我们将制作一个非常简单的购物车,将其完全存储在会话中。介绍Rails session方法使我们可以访问Rails会话。 会话是使用Cookie实现的数据存储。 您可以在会话中存储简单的数据结构。 ...

    PHPWeb开发技术指南——pdf格式

    4.1.2 用cookies进行“会话”ID传输 95 4.1.3 URL手工改写 95 4.1.4 动态路径 96 4.1.5 DNS技巧 98 4.1.6 实际应用中的折衷方案 99 4.1.7 PHP的内嵌“会话”库 100 4.2 安全性考虑 106 4.2.1 不要信任Web 107 4.2.2 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 ...

    ASP Cookies操作的详细介绍与实例代码

    Cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个Web站点会话之间持久地保持数据。Request和Response对象都有一组Cookie。Request.cookie集合是一系列Cookie,从客户端与...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 ...

    Fiddler 2.3.5.2 HTTP调试工具

    如查看向Web服务器发送cookies的内容,下载内容的大小等功能。 * 性能测试:如查看页面的大小。 * 调试:在会话选项中,可暂停,编辑HTTP通讯,Fiddler支持断点调试概念。。 * Fiddler不仅可用于Microsoft ...

    Web挖掘中的数据预处理算法研究

    文章研究了Web 挖掘预处理的三 个主要步骤: 数据清洗、用户识别和会话识别, 给出了各个步骤的关键算法, 并提出了一种基于注册用户和 Cookies 技术、用户IP 等综合因素来改进用户识别的算法。

    Servlet Session 跟踪

    但是仍然有以下三种方式来维持 Web 客户端和 Web 服务器之间的 session 会话: Cookies 一个 Web 服务器可以分配一个唯一的 session 会话 ID 作为每个 Web 客户端的 cookie,对于客户端的后续请求可以使用接收到的 ...

    毕业设计:ASP上海软件贸易网站设计与实现(源代码)

    在SESSION对象之中存储变量信息在用户浏览WEB应用程序的整个会话期间都得以保留。ASP引擎使用客户端COOKIES 来跟踪客户。存储在Session对象之中的变量对于用户是可以得到的,即使用户在应用程序之中正在浏览页面

    webserver:C ++跨平台(增强型)HTML Web服务器

    服务器为每个新客户端设置一个带有随机uuid(可在HTTPrequest.cookies中访问)的Cookie“会话”。 用法:您需要使用./certs/-&gt; newcert.pem,privkey.pem,dh2048.pem中的证书文件-&gt;使用generateCertificates.sh...

    Sound PHP Engine:内容管理系统-开源

    2) 它只使用会话而不使用客户端 cookie(当 web 服务器上的 php.ini 文件包含“session.use_cookies = 0”字符串和“session.use_trans_sid = 1”字符串时,该功能有效)。 3)会话的所有信息都存储在数据库中; 4)...

    JavaScript学习笔记之Cookie对象

     Cookie文件由所访问的Web站点建立,以长久的保存客户端与Web站点间的会话数据,并且该Cookie数据只允许被所访问的Web站点进行读取。  Cookie文件的格式:  NS:Cookie.txt  IE:用户名@域名.txt  有两种类型的...

    java-web-plops:迷你框架MVC Java Web

    POPS 迷你框架MVC Java Web。 用户会话管理 层次控制 Cookies管理 表达语言 标签库 使用豆

    About_Login:登录

    -Cookies-代表服务器在Web浏览器(用户的计算机)上存储各种信息。 发送请求时,将其发送到标头中,以便服务器识别用户。 在身份验证过程中,服务器通过初始请求向客户端发出cookie,然后从下一个请求,客户端像...

    Web应用安全:XSS安全隐患产生原因.pptx

    2、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; 3、劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等; 4、强制弹出广告页面、...

    JavaScript中Cookies的相关使用教程

    Cookies是什么 ? Web浏览器和服务器使用HTTP协议进行通信,并且HTTP是一种无状态协议。但对于一个商业网站它需要保持不同的页面间的会话信息。例如在完成多页后,一个用户注册结束。但是,如何保持所有网页用户的...

Global site tag (gtag.js) - Google Analytics