javaweb学习笔记之cookie,session

目录

 

1.Cookie的概述

2.Cookie的用途

3.javaweb对Cookie的使用

4.Cookie的属性

HttpSession

1.概述

2.使用

3.HttpSession的原理

4.HttpSession的其它方法:

5.URL重写


1.Cookie的概述

Cookie是http协议指定的,由服务器保存Cookie到浏览器,浏览器在下次请求服务器时把上次得到Cookie归还给服务器
其是由服务器创建保存到客户端浏览器的一个键值对,服务器保存Cookie的响应头:Set-Cookie:aaa=AAA
当浏览器请求服务器时,会把该武器保存的Cookie随请求发送给服务器,浏览器归还Cookie的请求头:Cookie:aaa=AAA
http协议对Cookie的规定:
 1个Cookie最大4KB
 1个服务器最多可以向1个浏览器保存20个Cookie
 1个浏览器最多可以保存300个Cookie
注:浏览器都会在一定范围违反Http规定

2.Cookie的用途

服务器使用Cookie来跟踪客户端状态
例如:
 保存购物车(其不能使用request保存,因为他是一个用户向服务器发送多个请求信息)
 显示上次的登录名(与购物车同理)

3.javaweb对Cookie的使用

在jsp的代码块中

	
Cookie cookie1 = new Cookie("aaa","AAA");
Cookie cookie2 = new Cookie("bbb,"BBB");
responsn.addCookie(cookie1);//向浏览器保存Cookie
responsn.addCookie(cookie2);

Cookie[] cookies = request.getCookie();//获取浏览器归还的Cookie
if(cookies != null){
		for(Cookie c : cookies)
			out.print(c.getName()+"="+c.getValue()+"<br/>";
}

4.Cookie的属性

键值对属性:Name,Value

生命属性:maxAge->Cookie可以保存的最大时长,以秒为单位
 maxAge>0:浏览器会把Cookie保存到客户端硬盘上,有效时长为maxAge的值
 maxAge<0:Cookie只在浏览器内存中存在,当用户关闭浏览器时,Cookie释放内存
 maxAge=0:浏览器会马上删除这个Cookie
使用方法:

Cookie cookie1 = new Cookie("aaa","AAA");
cookie1.setMaxAge(60);//保存在客户端硬盘上60s
response.addCookie(cookie);

路径属性:path(默认在相应页面目录下)
不是设置Cookie在客户端的保存路径,而是由服务器创建Cookie时设置的
当浏览器访问服务器某个路径时,path用于确定浏览器需要归还的那个Cookie
即,浏览器访问服务器路径,如果包含某个Cookie的路径,则会归还这个Cookie
设置方法:cookie.setPath("/");

域属性:domain
domain用于指定Cookie的域名,当多个二级域中共享Cookie时使用
例如:www.baidu.com,zhidao.baidu.comn,news.baidu.com…
设置方法:cookie.setDomain(".baidu.com")

HttpSession

1.概述

HttpSession底层依赖Cookie,是服务器端对象,保存在服务器端,用来会话跟踪的类(会话:一个用户对服务器的多次连贯请求)
属于Servlet三大域对象之一,所以也具有:setAttribute(),getAttribute(),removeAttribute()三个方法
服务器会为每个客户端创建一个session对象,session被服务器保存到一个Map中,即session缓存

2.使用

Servlet中获取session对象:

HttpSession session = request.getSession();
//session是jsp内置对象,不用创建直接使用

session域相关方法:即域对象的三大方法

3.HttpSession的原理

Servlet执行request.getSession()方法或访问jsp页面,会自动获取Cookie中的JSESSIONID:
  如果sessionId不存在,则创建session,把session保存起来,新创建的sessionId保存到Cookie中
  如果sessionId存在,通过sessionId查找session对象,如果没有查找到,则创建session,并把session保存起来,新创建的sessionId保存到Cookie中
  如果sessionId存在,通过sessionId查找到session对象,那么不再创建session对象
补:getSession(fasle)->如果session缓存中不存在session,那么返回null,而不会创建session对象

4.HttpSession的其它方法:

String getId():获取JSESSIONID
int getMaxInactiveInterval():获取session可以得最大不活动时间(秒),默认为30分钟
可以在web.xml中配置:

<session-config>
    <session-timeout>20</session-timeout>
</session-config>

void invalidate():让session失效,当客户端再次请求时,服务器会为其创建一个新的session
boolean isNew():查看session是否为新

5.URL重写

session依赖cookie,目的是让客户端发出请求时归还sessionid,使其能找到对应的session
如果客户端禁用cookie,则无法得到sessionid,那么就无法获取相应的session
解决方法:使用URL重写,即:
网站所有请求链接、表单都添加一个特殊的请求参数(sessionid),当服务器不能通过cookie获取sessionid时可以通过参数得到sessionid,从而找到session对象
常用方法:response.encodeURL(String url)//对url进行智能重写,在请求没有归还sessionid的cookie时,自动重写url

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值