Cookie

注:

第一次访问服务器,服务器会增加Set-Cookie头字段,将Cookie信息发送给浏览器,并保存在客户端。

当后续访问服务器时,会在请求消息中将用户信息以Cookie的形式发送给服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。

Servlet API中提供了javax.servlet.http.Cookie,它包含了生成Cookie信息和提取Cookie信息各个属性的方法

Cookie一旦被创建,它的名称就不能更改

Cookie类的常用方法

方法声明

功能描述

String getName()

用于返回Cookie的名称

void setValue(String newValue)

用于为Cookie设置一个新的值

String getValue()

用于返回Cookie的值

1.void setMaxAge(int expiry)

用于设置Cookie在浏览器客户机上保持有效的秒数

2.int getMaxAge()

用于返回Cookie在浏览器客户机上保持有效的秒数

3.void setPath(String uri)

用于设置该Cookie项的有效目录路径

4.String getPath()

用于返回该Cookie项的有效目录路径

5.void setDomain(String pattern)

用于设置该Cookie项的有效域

6.String getDomain()

用于返回该Cookie项的有效域

void setVersion(int v)

用于设置该Cookie项采用的协议版本

int getVersion()

用于返回该Cookie项采用的协议版本

void setComment(String purpose)

用于设置该Cookie项的注解部分

String getComment()

用于返回该Cookie项的注解部分

void setSecure(boolean flag)

用于设置该Cookie项是否只能使用安全的协议传送

boolean getSecure()

用于返回该Cookie项是否只能使用安全的协议传送

1.2这两个方法用于设置和返回Cookie在浏览器上保持有效的秒数。如果设置的值为一个正整数时,浏览器会将Cookie信息保存在本地硬盘中。如果设置值为负整数时,浏览器会将Cookie信息保存在的缓存中,当浏览器关闭时,Cookie信息会被删除。如果设置值为0时,则表示通知浏览器立即删除这个Cookie信息。默认情况下,Max-Age属性的值是-1

3.4这两个方法是针对CookiePath属性。如果创建的某个Cookie对象没有设置Path属性,那么该Cookie只对当前访问路径所属的目录及其子目录有效。如果想让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将其Path属性设置为“/”。

5.6这两个方法是针对CookieDomain属性的。Domain属性是用来指定浏览器访问的域。例如,传智播客的域为“itcast.cn”。那么,当设置Domain属性时,其值必须以“.”开头,如Domain=.itcast.cn。默认情况下,Domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息回送给服务器。需要注意的是,Domain属性的值是不区分大小写的。

public class LastAccessServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
   public void doGet(HttpServletRequest request, 
	                        HttpServletResponse response)
				throws ServletException, IOException {
			// 指定服务器输出内容的编码方式UTF-8,防止发生乱码
			response.setContentType("text/html;charset=utf-8");
			String lastAccessTime = null;
	         // 获取所有的cookie,并将这些cookie存放在数组中
			Cookie[] cookies = request.getCookies();
			// 遍历cookies数组
			for (int i = 0; cookies != null && i < cookies.length; i++) {
				if ("lastAccess".equals(cookies[i].getName())) {
					// 如果cookie的名称为lastAccess,则获取该cookie的值
					lastAccessTime = cookies[i].getValue();
					break;
				}
			}
			// 判断是否存在名称为lastAccess的cookie
			if (lastAccessTime == null) {
				response.getWriter().print("您是首次访问本站!!!");
			} else {
			     response.getWriter().print("您上次的访问时间是: " 
	                           + lastAccessTime);
			}
			// 创建cookie,将当前时间作为cookie的值发送给客户端
			String currentTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
					.format(new Date());
			Cookie cookie = new Cookie("lastAccess",currentTime);
			//cookie.setMaxAge(60*60); //设置cookie最大存在时间
			// 发送 cookie
			response.addCookie(cookie);
		}
	    public void doPost(HttpServletRequest req, HttpServletResponse resp)
				throws ServletException, IOException {
			this.doPost(req, resp);
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值