Servlet中会话之cookie(7)

1.(1).用户输出URL地址,有效访问某个网站,在该网站上的一系列有效操作,随后关闭浏览器的整个过程,叫一次会话

(2).会话主要解决服务端如何保存每个客户端对应的私有信息。

(3).会话主要有二种:

a>Cookie技术[客户端技术]

b>Session技术

两者的不同就是:session会随着浏览器关闭而失效,但cookie会一直存放在客户端机器上,除非超出Cookie的生命周期。

2.Cookie技术

   (1)Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

(2)一个Cookie只能存储一种类型的信息

(3)更新某个名的Cookie,即向浏览器写一个相同名的Cookie

(4)Cookie一定要设置一个有效时间,如果不设置的话,默认该请求访问结束后,该Cookie自动销毁,用专业名词来讲,Cookie的默认有效期时一个有效会话结束

3.Cookie的理解图

4.Cookie要注意的地方:

(1)一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

(2)一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。

(3)浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

(4)如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。

注意,删除cookie时,path必须一致,否则不会删除

5.代码小小练习:

package cn.wwh.www.web.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;

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

/**
 *类的作用:用来练习cookie的创建和获取其中的数据值 注意1.对于返回的cookie一定对其进行非空的判断
 * 2.对于编码方式采用UTF-8的方式,运行结果出现异常了,
 * 而采用 gbk的方式却正常输出,很是奇怪,(英文不需要转码)
 *
 *
 *@author 一叶扁舟
 *@version 1.0
 *@创建时间: 2014-8-1 下午04:52:31
 */
public class CreateCookie extends HttpServlet {

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

		// 在服务端创建一个Cookie
		Cookie name = new Cookie("name", URLEncoder.encode("一叶扁舟", "gbk"));
		// 设置cookie的存活时间
		name.setMaxAge(1 * 24 * 60 * 60);
		// 服务器将cookie写到客户端的缓存中
		response.addCookie(name);

		// 取出客户端中所有的cookie
		Cookie[] allCookie = request.getCookies();
		Cookie nameCookie = null;
		if (allCookie != null) {
			for (Cookie cookie : allCookie) {
				System.out.println("cookieName:" + cookie.getName());
				if (cookie.getName().equals("name")) {
					nameCookie = cookie;
					break;
				}
			}

		}

		// 输出cookie的信息
		System.out.println("cookie的name:" + nameCookie.getName());
		System.out.println("cookie的value:"
				+ URLDecoder.decode(nameCookie.getValue()));
		System.out.println("cookie的version:" + nameCookie.getVersion());
		System.out.println("cookie的path:" + nameCookie.getPath());
		System.out.println("cookie存活时间:" + nameCookie.getMaxAge());
	}
}

6.代码练习2:

package cn.wwh.www.web.cookie;

import java.io.IOException;
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;

/**
 *类的作用:利用cookie技术,显示用户上次访问的时间
 *
 *
 *@author 一叶扁舟
 *@version 1.0
 *@创建时间: 2014-8-1 下午08:38:14
 */
public class ShowVisitedTime extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name = request.getParameter("name");
		if (name == null) {
			name = "default";
		}

		// 获取客户端的cookie
		Cookie[] cookies = request.getCookies();

		if (cookies == null) {
			Cookie nameCookie = new Cookie("name_" + name, System
					.currentTimeMillis()
					+ "");
			// 设置cookie缓存时间为一个小时
			nameCookie.setMaxAge(1 * 60 * 60);
			// 写到客户端的缓存
			response.addCookie(nameCookie);
			response.setContentType("text/html;charset=UTF-8");
			response.getWriter().write(
					"欢迎" + "您首次光临本网站,当前时间为:" + new Date().toLocaleString());
		} else {
			Cookie c = null;
			for (Cookie cookie : cookies) {
				// 找到了改用户之前登陆过
				if (cookie.getName().equals("name_" + name)) {
					c = cookie;
					break;
				}
			}

			if (c != null) {
				response.setContentType("text/html;charset=UTF-8");
				// 获取上次访问的时间
				String lastTimeStr = c.getValue();
				Long lastTime = Long.parseLong(lastTimeStr);
				response.getWriter().write(
						"欢迎" + "您再次访问本网站,上次访问时间为:"
								+ new Date(lastTime).toLocaleString());
				Cookie nameCookie = new Cookie("name_" + name, System
						.currentTimeMillis()
						+ "");
				// 设置cookie缓存时间为一个小时
				nameCookie.setMaxAge(1 * 60 * 60);
				// 写到客户端的缓存
				response.addCookie(nameCookie);
			}
		}
	}
}

浏览器的效果图:

之后的刷新:

缓存文件的截图:

Servlet中会话之cookie(7),布布扣,bubuko.com

时间: 2024-08-05 18:05:15

Servlet中会话之cookie(7)的相关文章

Servlet中保存的cookie值读取不到

在设计登录时记住密码功能时,很多时候回使用cookie,在Servlet中保存cookie时,再次访问登录页面,没有读取到保存的cookie值,代码如下: 1 Cookie idCookie = new Cookie("id",String.valueOf(user.getId())); 2 Cookie nameCookie = new Cookie("username",URLEncoder.encode(user.getName(), "utf-8&

JavaWeb开发中的会话技术[Cookie/Session]

会话 会话:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题: 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自回产生一些数据,程序要想办法为每个用户保存这些资源.电商中的保存用户的购买的商品. 保存会话数据的两种技术 Cookie:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去,这样web资源处

Servlet会话管理——Cookie会话跟踪

Cookie是一块可以嵌入到HTTP请求和响应中的数据.典型情况下,Web服务器将Cookie值嵌入到响应的Header,而浏览器则在其以后的请求中都将携带同样的Cookie.Cookie的信息中可以有一部分用来存储会话ID,这个ID被服务器用来将某些HTTP请求绑定在会话中.Cookie由浏览器保存在客户端,通常保存为一个文本文件.Cookie还含有一些其他属性,如可选的注释.版本号及最长生存周期等. 由于统一客户端对服务器的请求都会携带Cookie,因此可以通过在Cookie中添加与会话相关

编写一个简单登录验证需要记录日志,Servlet中的Cookie

登录验证并记录日志 之前介绍了如何使用Server.mysql.tomcat等知识点编写了一个简单的登录验证.但是现在有了一个新的需求,我想要在登录成功的时候往数据库记录一条日志,登录失败的时候也要记录一下.这个日志要记录用户名.用户的IP地址.登录的时间.还有成功或失败的状态标识. 所以现在需要增加一个表格,用于存储日志信息,如图: 因为大部分思路和之前的写登录验证差不多,只是多了个记录日志,所以我这里就不赘述实现的思路了,直接上代码. 1. 首先需要使用html编写出页面,代码示例: CSS

servlet中cookie和session操作

1.1 软件中的会话 一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器 登录场景: 打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页(显示用户名) 修改密码(输入原密码) 修改收货地址 ....... 问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢? 购物场景: 打开浏览器 -> 浏览商品列表  -> 加入购物车(把商品信息保存下来)  -> 关闭浏览器 打开浏览器->  直接进入购物

python requests模块session的使用建议及整个会话中的所有cookie的方法

话不多说,直接上代码 测试代码 服务端 下面是用flask做的一个服务端,用来设置cookie以及打印请求时的请求头 # -*- coding: utf-8 -*- from flask import Flask, make_response, request app = Flask(__name__) @app.route('/a1') def a1(): print(request.headers) rp = make_response() rp.set_cookie('a1', '123'

Servlet中的Cookie使用方法

Servlet中的doGet方法: 1 protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { 2 request.setCharacterEncoding("utf-8"); 3 response.set

会话控制cookie和session

Cookie Cookie简介 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条裤子,又买了一个手机.由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么.而Cookie就是解决方案之一. Cookie实际上就是服务器保存在浏览器上的一段信息.浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就

会话跟踪Cookie与Session

会话跟踪用来跟踪用户的整个会话,常用的是Session和Cookie.Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cookie保存起来,当浏览器再请求该网站时,把请求的网址连同该Cookie一同交给服务器.服务器检查该Cookie,以此来辨认用户状