Cookie和Session

1.会话技术

从打开一个浏览器访问某个站点,到关闭整个浏览器的整个过程就是一次会话

会话技术分为:Cookie和Session

Cookie:数据储存在客户端本地(浏览器储存文件路径,减少了服务器压力,但安全性不好客户端可以清除Cookie

Session:将数据储存在服务器端,安全性相对好,增加服务器压力

2.Cookie

Cookie是存放在响应头和请求头中的

 

2.1)服务器创建一个Cookie,并将Cookie发送到客户端

a.创建Cookie

Cookie cookie = new Cookie(String cookieName,String cookieValue);

Cookie不能存放中文(只能存放String类型的)

 

b.设置Cookie的持久化时间

cookie.setMaxAge(int seconds);//单位秒

注意:如果不设置持久化时间,cookie会一直存在留在浏览器内存中(浏览器关闭cookie会销毁--会话级别);

如果设置了持久化时间cookie会保存到浏览器的磁盘文件中,

 

c.设置Cookie的携带路径

cookie.setPath("/WEB16");

注意:如果不设置携带路径,那么该cookie信息访问产生该cookie的web资源所在路径都携带cookie信息(即cookie所在的目录下)

 

d.向客户端发送Cookie

response.addCookie(Cookie cookie);//发送到响应头中,下次访问时请求头也会有了(第一次访问时请求头中没有)

 

e.删除Cookie

创建一个同名cookie,然后设置持久化时间为0即可

Cookie cookie = new Cookie("name","");

cookie.setPath("/WEB16");

 

2.2)服务器接收客户端的Cookie

获得客户端携带的cookie的数据 >>> 循环遍历 >>> 通过cookie名称获得想要的cookie

                //获得客户端携带的cookie的数据
		Cookie[] cookies = request.getCookies();
		//Cookie cookie = new Cookie("name","zhangsan");
		//通过cookie名称获得想要的cookie
		if(cookies!=null){
			for(Cookie cookie : cookies){
				//获得cookie的名称
				String cookieName = cookie.getName();
				if(cookieName.equals("name")){
					//获得该cookie的值
					String cookieValue = cookie.getValue();
					System.out.println(cookieValue);
				}
			}
		}

 

3.Session

session是将数据储存到服务器端的技术,会为每个客户端都创建一块内存空间并生成一个唯一的JSESSIONID

session是基于cookie技术的,JSESSIONID就是储存在cookie中

 

3.1)获取session对象(划重点)

HttpSession session = request.getSession();

注意:getSession()方法内部会判断是否该客户端已经在服务器端有了seesion,如果没有就创建一个新的session,如果有则返回旧的session,(其实质就是通过请求中cookie中的JSESSIONID来判断是否存在

 

3.2)向session中存入数据(划重点)

session.setAttribute(String name,Object obj);

session.getAttribute(String name);

session.removeAttribute(String name);

session也是一个域对象,它的范围为一次会话级别

 

3.3)设置session持久化

session默认在浏览器关闭是就会被清除掉(储存在Cookie中的JSESSIONID没了),我们可以通过设置cookie的持久化间接设置session的时间

                String id = session.getId();//得到该session对象的编号id
		//手动创建一个存储JSESSIONID的Cookie 为该cookie设置持久化时间(必须要设置路径)
		Cookie cookie = new Cookie("JSESSIONID",id);//新建cookie覆盖
		cookie.setPath("/WEB16/");//设置路径
		cookie.setMaxAge(60*10);//设置时间(单位:s)
		response.addCookie(cookie);//添加到客户端

 

3.4)session的生命周期

创建:第一次执行request.getSession();时创建

销毁:a.服务器关闭时(如果设置了持久化时间,浏览器关闭不会清除cookie

           b.session过期(默认三十分钟过期,这三十分钟是从没有使用session开始算起),可以通过web.xml设置

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

          c.手动销毁:session.invalidate();

session的作用范围是一次会话中,也就是它是一次会话中的公用资源

 

 

 

总结:

Cookie技术:存到客户端
发送cookie
Cookie cookie = new Cookie(name,value)
cookie.setMaxAge(秒)
cookie.setPath()
response.addCookie(cookie)
获得cookie
Cookie[] cookies = request.getCookies();
cookie.getName();
cookie.getValue();


Session技术:存到服务器端 借助cookie存储JSESSIONID
HttpSession session = request.getSession();

setAttribute(name,value);
getAttribute(name);

session生命周期
创建:第一次指定request.getSession();
销毁:服务器关闭、session失效/过期、手动session.invalidate();
session作用范围:默认一会话中

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值