什么是状态管理?cookie和session

xiaoxiao2021-02-28  54

什么是状态管理?

将浏览器与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 同步。

转载请注明原文地址: https://www.6miu.com/read-2619040.html

最新回复(0)