状态管理_学习笔记

状态管理

什么是状态管理

将浏览器与web服务器之间多次交互当做一个整体来处理,并且将多次交互所产生的数据(即状态)保存下来。

如何进行状态管理

a.方式一  将状态保存在浏览器端

通常使用Cookie技术。

b.方式二  将状态保存在服务器端

通常使用Session技术。

Cookie

什么是Cookie?

服务器临时存放在浏览器端的少量数据,
用于跟踪用户的状态。

当浏览器访问服务器时,服务器会将少量数据以
set-cookie消息头的方式发送给浏览器,浏览器
会将这些数据保存下来。
当浏览器再次访问服务器时,会将这些数据以cookie
消息头的方式发送给服务器。

在这里插入图片描述

如何添加Cookie?

Cookie c = new Cookie(String name,String value);
注:
	name一般称之为cookie名,value称之为cookie值,都必须是字符串。
response.addCookie(c);

如何读取Cookie?

Cookie[] request.getCookie();
注:
	该方法有可能返回null。
String cookie.getName();
String cookie.getValue();

cookie的生存时间

a.默认情况下,浏览器会将cookie保存在内存里面,浏览器
只要关闭,cookie会被删除。

b.可以调用setMaxAge方法来设置cookie的生存时间

cookie.setMaxAge(int seconds);
注:
	a.单位是秒。
	b.当seconds > 0,浏览器会将cookie保存在硬盘上,当超过指定的时间,浏览器会将cookie删除。
	c.当seconds < 0,缺省值(浏览器会将cookie保存在内存里面)。
	d.当seconds = 0,删除cookie。
		比如,要删除一个名称为"username"的cookie,代码如下:
			Cookie c = new Cookie("username","");
			c.setMaxAge(0);
			response.addCookie(c);

cookie的编码问题

a.什么是cookie的编码问题?

cookie只能存放合法的ascii字符,如果要存放中文,
需要将中文转换成合法的ascii字符的形式。

b.如何处理?

String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String
charset);

建议,在实际开发时,对添加的数据统一使用encode
方法来编码。

cookie的路径问题

a.什么是cookie的路径问题?

浏览器访问服务器时,会比较请求地址是否与cookie
的路径匹配,只有匹配的cookie才会被发送。

b.cookie的默认路径

cookie的默认路径等于添加该cookie的web组件的路径,比如AddCookieServlet(/day06/addCookie) 添加了一个cookie,则该cookie的默认路径是
"/day06"。

c.匹配规则

请求地址要么是等于cookie的路径,要么是cookie的
子路径,只有符合该条件的cookie,浏览器才会发送出去。

在这里插入图片描述
d.修改路径

cookie.setPath(String path);
注:
	path就是路径。

cookie的限制

a. cookie可以被用户禁止。
b. cookie不安全。

对于敏感数据,一定要加密。

c. cookie只能保存少量的数据。

大约4k左右

d. cookie的数量也有限制。

大约是几百个

e. cookie只能保存字符串。

Session

session是什么?

服务器端为了保存状态而创建的一个特殊的对象。

注:
	当浏览器访问服务器时,服务器端创建一个特殊的
对象(该对象一般称之为session对象,该对象有一个
唯一的id,一般称之为sessionId)。服务器会将sessionId以cookie的方式发送给浏览器。
	当浏览器再次访问服务器时,会将sessionId发送
过来,服务器端可以依据sessionId找到对应的session
对象。

如何获得session对象?

方式一:

HttpSession s = 
	request.getSession(boolean flag);
注:
	a.HttpSession是一个接口。
	b.如果flag为true:
		先查看请求当中是否有sessionId,如果没有,
	则创建一个session对象;如果有sessionId,
	则依据sessionId查找对应的session对象,如果找
	到了,则返回该对象,找不到,则创建一个新的
	session对象。
	c.如果flag为false:
		先查看请求当中是否有sessionId,如果没有,
	返回null;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,找不到,返回null。

在这里插入图片描述

方式二:

HttpSession s = request.getSession();
等价于 request.getSession(true);

常用方法

1)session.setAttribute(String name,Object obj);

注:
	以name作为key,以obj作为value,将数据存放到了
	一个Map对象里面。

2)Object session.getAttribute(String name);

注:
	如果绑订值不存在,返回null。

3)session.removeAttribute(String name);

注:
	解除绑订。

session超时

a.什么是session超时?

服务器会将空闲时间过长的session对象删除掉。
注:
	缺省的超时时间长度一般是30分钟。

b.如何修改超时时间长度?

方式一 修改web.xml配置文件。

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

方式二  
session.setMaxInactiveInterval(int seconds)
注:
	设置两次请求之间的最大间隔时间,如果超过了
	该时间,则session对象会被删除。

删除session

 session.invalidate() 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值