JavaWeb-day16-cookie、session

一、cookie

1.cookie的出现
  • 在浏览器发送不同请求时,服务器端基于HTTP协议无法识别多次请求是否来自同一个浏览器。
2.cookie的概念
  • Cookie是服务器发给客户端(一般是浏览器)的一小段文本,保存在浏览器所在客户端的内存或磁盘上。
  • 一股来说, Cookie 通过HTTP Headers从服务器端返回到客户端,首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie,然后,客户端在它的请求中通过Cookie header 包含这个已经创建的Cookie,并且把它返回至服务器,客户端会自动在计算机的Cookie文件中添加一条记录。客户端创建了一个Cookie 记录后,对于每个针对该网站的请求,都会在Header中带着这个Cookie。不过,对于其他应用的请求,Cookie是不会一起发送的。 服务器可以从客户端读出这些Cookie, 通过Cookie, 客户端和服务器端建立起一种联系。
  • 也就是说,Cookie 是一种可以让服务器对客户端信息进行保存和获取的机制,从而大大扩展了基于Web的应用功能。
3.Cookie有效性

①分类
[1]会话级Cookie:保存在浏览器内存中,随着浏览器关闭的关闭而释放,默认情况
[2]持久化级Cookie:保存在文件系统中,不会随着浏览器关闭而释放,但到达预先指定的时间就会自动释放

②设置
cookie.setMaxAge(int seconds);
[1]seconds正整数:表示将Cookie设置为持久化Cookie,保持seconds秒
[2]seconds=0:表示删除Cookie
[3]seconds负整数:表示将Cookie设置为会话级Cookie
注意:设置完成以后,必须使用response的addCookie()添加才可生效

4.运行机制

①“创建Cookie对象

 Cookie cookie = new Cookie("myCookie", UUID.randomUUID().toString());

②将Cookie对象中封装的信息回送到浏览器

 API:response.addCookie(cookie);
 以响应消息头的形式发送给浏览器
 Set-Cookie:myCookie=5691a6b4-7441-4916-b319-1a04c31ec504

③浏览器请求服务器时携带Cookie数据
以请求消息头的形式携带Cookie数据
Cookie:myCookie=5691a6b4-7441-4916-b319-1a04c31ec504

④服务器从请求对象中获取Cookie数据

 //从request对象中能够获取到Cookie信息,返回的是Cookie的数组
	response.setContentType("text/html;charset=UTF-8");
	PrintWriter writer = response.getWriter();
	Cookie[] cookies = request.getCookies();
 //cookies数组不一定有值,如果浏览器没有提交Cookie数据,则cookies的值就等于null
	 if(cookies != null) {
	    for(int i = 0; i < cookies.length; i++) {
	String name = cookies[i].getName();
	        String value = cookies[i].getValue();
	writer.write("Cookie中的数据是:"+name+"="+value);
	     writer.write("<br />");  
	    }
	}

二、session

1、Session 概述

Session也是一个域对象,可以在自身的属性域中保存数据,在一定范围内共享。

2、Session的工作机制
  1. 并不是浏览器一访问服务器就创建Session对象,而是只有在服务器端调用request.getSession()方法时,Tomcat服务器才会“创建”Session对象。

  2. request.getSession()方法
    (1)请求中没有携带任何有关Session的标识,往往就是浏览器第一次访问的时候。
    (2)请求中没有携带任何有关Session的标识:Tomcat会创建一个Session对象,并创建一个特殊的Cookie,这个特殊Cookie的name属性是JSESSIONID,值是一个唯一值,而且是随机生成的。将这个JSESSIONID Cookie作为关联这个Session对象的标识写回浏览器。
    (3)请求中携带了JSESSIONID时,Tomcat会在已经创建好的Session对象的集合中,查找匹配的Session对象。实现多个请求识别浏览器的身份的目的。
    ①能找到:返回找到的Session对象
    ②找不到:创建一个新的Session对象返回.通常由于服务器超时释放。
    即:我们是通过JSESSIONID的值找到的session对象。

  3. isNew()返回boolean标识当前Session对象是新创建的,还是原有的

  4. getId()返回当前Session对象的JSESSIONID值

3、Session的时效管理

Session代表浏览器和服务器之间的一次会话,本来应该在会话开始时创建,会话结束时释放。但是浏览器关闭时,服务器根本检测不到,那就只能由服务器自己设置一个时间了。
[1]自然超时
< 1>Tomcat配置文件中web.xml中有默认的超时时间的配置

< session-config>
< session-timeout>30</session-timeout>
< /session-config>

Session对象默认的有效时间是30分钟,指的并不是Session对象从创建开始30分钟后过期,而是从最后一次访问开始,30分钟后失效。
< 2>调用Session对象的方法手动设置超时时间
session.setMaxInactiveInterval(10)。以秒为单位
[2]手动调用invalidate()方法直接失效

4、项目阶段

登录成功,记录浏览器信息

1)显示登录用户
//将用户信息保存到Session对象中,到JSP页面中就可以通过Session隐含对象将数据读取出来

HttpSession session = request.getSession();
session.setAttribute("loginUser", userName);

2)退出操作

String method = request.getParameter("method");
   if("logout".equals(method)){
    HttpSession session = request.getSession();
    session.invalidate();
    response.sendRedirect(request.getContextPath()+"/index.jsp");
    return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值