什么是状态管理?cookie和session

什么是状态管理?

将浏览器与web服务器的多次交互当作一个整体来处理,将多次交互所涉及的数据状态保存下来。

管理方式1:将状态保存在浏览器,需要使用cookie技术

管理方式2:将状态保存在服务器,需要使用session技术

***什么是cookie?

服务器存放在浏览器端的少量数据。

cookie:

cookie是一种客户端的状态管理技术。

当浏览器访问服务器时,服务器会将一些信息以set_cookie消息头的形式发送给浏览器,浏览器会将这些数据保存下来,当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式一并发送给服务器。(有几个cookie,就有几个消息头)。

添加cookie的方法:

Cookie cookie = new Cookie(String name,String value);cookie的名字和值为String 类型

response.addCookie(cookie);

查询cookie的方法:

Cookie[ ] cookies = request.getCookies();

for( Cookie cookie : cookies){

    String name = cookie.getName();//返回查询到的cookie的name

     String value = cookie.getValue();//返回cookie的值

}

cookie的生存时间:

默认情况下,cookie会被浏览器保存在内存里面,浏览器只要不关闭,cookie就一直存在。

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

// Sets the maximum age in seconds for this Cookie.

cookie.setMaxAge(int seconds);

当 seconds > 0 时,浏览器会将cookie保存在硬盘上,超过seconds时间后会删除cookie。

当 seconds < 0 时,默认为小于0,cookie会保存在内存中。

当 seconds = 0 时,删除当前cookie;

例如:要删除当前名为 name 的cookie,

Cookie cookie = new Cookie("name","");
cookie.setMaxAge(0);
response.addCookie(cookie);

cookie 的编码问题:

cookie 只能保存合法的ASCII编码 ,如果要保存中文,需要将中文转换成相应的ASCII字符的形式。

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

cookie 的路径问题:

1、当浏览器向服务器上的某个地址发送请求时,会比较该地址是否符合cookie的路径的要求,只有符合的cookie才会发送给服务器。

2、cookie 的默认路径为添加该cookie 的web 组件的路径

3、cookie 的路径匹配规则:

    要访问的地址必须等于cookie 的路径或者是其子路径。

4、cookie 的路径修改:

//调用setPath()来设置cookie的路径
cookie.setPath(url);

5、cookie 的限制

    1)cookie 可以被用户禁止;

    2)cookie 不安全,所以,对于敏感数据一定要加密处理;

    3)cookie 只能保存少量的数据,总量大约为 2K;

    4)cookie 的数量有限制,总量约为几百个(某些网站为几十个);

    5)cookie 只能保存字符串。

***session  会话

什么是session?

服务端为了维护保存状态而创建的特殊对象。

session的工作原理:

如何获取session对象?

保存状态的方法:

setAttribute(String name, Object obj);
Object getAttribute(String name);
removeAttribute(String name);

session超时:

服务器会将空闲时间过长的session对象删除掉,这样可以节省内存空间(session的空闲时间一般为30m)。

设置session超时时间:

方式一:在Servers内设置超时时间(单位:minutes):(相对于全局)

方式二:在Maven项目的描述文件内设置超时时间(单位:minutes):(相对于当前项目)

方式三:在Servlet里面调用 setMaxInactiveInterval() 设置超时时间(单位:seconds):(相对于容器内当前servlet)

设置超时时间的优先级:方式三 > 方式二 > 方式一

删除session:

session 验证:

step1:登陆成功之后,将一些数据绑定到session对象上。

session.setAttribute("user", user);
step2:如何请求涉及到需要保护的资源(只有登陆成功后才能访问的资源,比如用户列表),则进行session认证。
Object obj = session.getAttribute("user");
if(obj == null){
response.sendRedirect("login.jsp");
}

比较cookie 与 session 的优缺点:

cookie 优点: 不占用服务器的内存资源。

session 的优点: 安全,且可以保存更丰富的数据类型。

session 的缺点:可能会占用过多的内存空间,多台服务器负载均衡,session 同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值