1、什么是状态管理?
http协议是一个无状态协议,当浏览器的请求
到达服务器时,服务器并不记录是谁访问它,
处理请求之后,返回结果给浏览器。当下一次浏览器
再次访问服务器,服务器并不清楚该浏览器曾经访问
过它。
有一些web应用,需要将浏览器与服务器之间的
多次访问当成一个整体来处理。比如:购物系统。
当浏览器发送一个购买请求,购物系统会记录这次请求
的相关数据,当浏览器再次发送购买请求时,会
将之前记录的数据进行相应的修改。
因为http协议是无状态协议,对于这样一些需要
状态管理的应用无能为力,需要额外的编程。也就是说,
要将浏览器与服务器之间多次访问的相关数据记录下
来,就叫状态管理。
2、cookie
1)什么是cookie?
浏览器向服务器发送请求时,服务器会将少量的
数据返回给浏览器(该数据以set-cookie消息头的
形式返回给浏览器),浏览器会将这些数据存放到
硬盘或者内存上。当浏览器下次再次访问服务器时,
会将之前存放的数据发送给服务器(以cookie消息头
的形式发送给服务器)。通过这种方式,就可以记录
浏览器与服务器之间交互的数据,也就是状态。
2)如何创建cookie?
Cookie cookie = new Cookie(String name,
String value);
response.addCookie(cookie);
3)查询cookie
Cookie[] cookies = request.getCookies();
如果没有cookie,则返回null。
String getName(); //返回cookie的名字
String getValue(); //返回cookie的值。
4)cookie的编码问题
cookie的值只能是ascii,如果要保存中文,需要
将中文转换成对应的ascii形式。
保存之前,先编码:
URLEncoder.encode(String str,
String encode);
比如:
String URLEncoder.encode("小美","utf-8");
查询之后,先解码:
URLDecoder.decode(String str,
String encode);
5)cookie的生存时间
setMaxAge(int seconds);
seconds > 0 : cookie实际保存的时间,如果
用户关闭浏览器,浏览器会将cookie保存到
硬盘上。
seconds = 0: 删除cookie。
怎样删除:
比如要删除一个名叫"c1"的cookie。
Cookie c = new Cookie("c1","");
c.setMaxAge(0);
response.addCookie(c);
secodes < 0: 默认值,浏览器会将cookie
保存到内存里。
6)cookie的路径问题
所谓路径问题,指的是,浏览器在访问
服务器时,会先比较要访问的组件的路径与
cookie的路径,只有匹配的cookie才会发送。
cookie的路径的默认值:
与保存cookie的组件的路径是一样的。
比如:
使用/appname/jsp1/addCookie1.jsp保存
cookie,则对应的cookie的路径也是
/appname/jsp1。
cookie的路径其实就是一个顶层目录,要访问
的组件的路径必须是该目录的子目录,或者
就是该目录,浏览器才会将该cookie发送给
服务器。
可以通过 setPath(String path)来设置cookie
的路径。
比如:
//访问同一个应用内部,都会发送该cookie
cookie.setPath("/appname");
//访问同一个服务器中的所有应用,都
//会发送该cookie
cookie.setPath("/");
练习:
写一个Add_FindCookieServlet,该Servlet运行
时先查询有没有名叫"cart"的cookie,如果有,则
显示cookie的值,如果没有,则创建该cookie。
(cookie的值随便填写一个就行了)。
7),cookie的限制
a,浏览器可以禁止cookie。
b,保存的数据量有限(大约4k)
c,保存的数据类型只能是字符串。
d,保存的值需要考虑编码问题。
e,因为cookie保存在客户端(也就是浏览器
所在的那台机器),值可以被查看。所以,不
要使用cookie记录敏感信息。
3、session
1)什么是session?
浏览器访问服务器时,服务器会创建一个
对象(该对象也称为session对象,该对象
有一个唯一的id号与其对应)。然后,服务器
会将id号发送给浏览器(默认情况下,使用cookie
机制发送)。当浏览器再次访问服务器时,会将
id号发送过来。服务器可以依据id号找到对应的
session对象。通过这个session对象,来保存
状态。
2)如何获得session对象。
方式一:
HttpSession s = request.getSession(boolean flag);
当flag = true时:
服务器会检查请求当中是否包含session id,
如果没有,则创建session对象。
如果有,则服务器会依据该id查找对应的session
对象是否存在:
如果存在,不创建了。
如果不存在,则创建一个新的session对象。
当flag = false时:
服务器会检查请求当中是否包含session id,
如果没有,不创建,返回null。
如果有,则服务器会依据该id查找对应的session
对象是否存在:
如果存在,不创建了。
如果不存在,返回null。
方式二:
HttpSession request.getSession();
与request.getSession(true)完全一样。
3)session的使用
//返回session id
String session.getId();
//绑订
session.setAttribute(String name,Object obj);
obj最好实现Serializable接口,原因是:
a,服务器有可能会将session的状态写入到硬盘或者
数据库,目的是减少session对内存资源的占用。
服务器会使用序列化协议来实现写入操作。
b,在集群环境下,需要进行session的同步,也就是,
当某台服务器上的某个session的状态发生改变,
需要将这种改变同步到其它服务器上的对应的
session。也会使用到序列化技术。
//通过绑订名,获得绑订值。该方法有可能返回null
Object session.getAttribute(String name);
//解除绑订
session.removeAttribute(String name);
4)session超时
服务器会将超过指定时间的session对象从内存中
删除。
//设置最大不活动时间,超过该时间,服务器
//会删除该session对象。
session.setMaxInactiveInterval(int seconds);
服务器也有一个默认的超时限制(比如tomcat,
30分钟),可以修改这个默认的时间:
方式一:改整个服务器的配置
tomcat可以改tomcat_home/conf/web.xml文件,
<session-config>
<session-timeout>30</session-timeout>
</session-config>
方式二:只改某个应用的web.xml
5)案例:
a,session验证
对于需要受保护的资源(比如页面,或者
servlet),添加验证,只有验证通过的请求,
才允许访问。
如何验证:
step1 在登录成功之后,向session
绑订用于验证的数据。比如绑订用户
对象。
step2 对于受保护的资源,在调用之前,
先执行session.getAttribute();如果能取
到之前绑订的验证数据,说明已经登录,
可以访问,否则,重定向到登录页面。
//立即销毁session对象。
session.invalidate():
分享到:
相关推荐
### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...
在Web开发中,Cookie和Session是两种非常重要的用户状态管理机制。它们被广泛用于跟踪用户的登录状态、个性化设置等,确保用户在不同页面之间切换时能够保持一致性体验。接下来,我们将详细探讨Cookie和Session的...
- **定义**:Session是在服务器端维护的一种会话状态管理机制。 - **作用**:用于存储用户在一次会话过程中需要的数据,比如购物车商品列表、用户身份信息等。 - **安全性**:相对较高,因为数据存储在服务器端,...
在Web开发中,Cookie和Session是两种非常重要的用户身份管理和会话跟踪技术。它们都是用来在客户端和服务器之间存储和传递信息的方式,但各有特点和适用场景。本篇将通过具体的示例代码来深入理解Cookie和Session的...
将客户端与服务器之间多次交互当做一个整体来看待,即将多次操作所涉及的数据记录下来
通过Cookie与Session机制,服务器能够识别并处理用户的状态信息,从而实现更丰富的交互体验。本文将详细解析Cookie与Session的工作原理、区别及应用场景。 #### 一、Cookie与Session的基本概念 **Cookie**:是一种...
为了解决这一问题,开发了两种主要的状态管理机制:Cookie机制和Session机制。 #### 二、术语解释:Session 在不同的上下文中,"session"这个词有着不同的含义,尤其是在网络通信和Web开发领域。通常,"session...
Servlet不仅能够生成动态内容,还能进行会话管理,其中最常用的就是Cookie和Session。...在实际项目中,应根据需求选择合适的会话跟踪策略,并合理配置过滤器和监听器,以实现高效、可靠的用户状态管理。
在Java Web开发中,Cookie和Session是两种非常重要的会话管理技术,它们主要用于跟踪和管理用户的状态信息。本文将深入探讨Cookie和Session的工作原理、应用场景以及如何在Java Web项目中进行有效利用。 **Cookie**...
在IT行业中,尤其是在Web开发领域,Cookie和Session是两种非常重要的技术,用于管理用户状态和保持会话。这里我们深入探讨这两个概念以及它们在Java Web中的应用。 首先,Cookie是客户端存储的小型文本文件,由...
Cookie机制与Session机制是两种常用的状态管理方式,它们各自拥有独特的功能与应用场景,对于理解两者之间的区别与联系至关重要。 #### Cookie机制 Cookie是一种小型的数据文件,由服务器端生成并发送到用户浏览器...
3. **共同目标**:虽然Session和Cookie有不同的特性和应用场景,但它们的共同目标都是为了保持用户的会话状态,提高用户体验。 #### 四、实际应用案例 假设一个在线购物网站: - 用户登录后,服务器为该用户创建...
在Web开发中,Cookie和Session是两种非常重要的用户身份验证和会话管理机制。它们都是用来跟踪用户状态,尤其是在无状态的HTTP协议中保持用户登录状态的关键技术。下面将对Cookie和Session进行深入剖析。 首先,...
标题“flask-session-cookie-manager”指的是一个Python应用,它专门针对Flask框架,用于管理和操作session cookie。在Web开发中,session cookie是服务器用来跟踪用户状态的一种方式,特别是在无状态的HTTP协议上...
Cookie 和 Session 是两种常见的用户身份验证和会话管理机制,它们在Web开发中扮演着重要角色,用于跟踪用户的在线状态和存储用户数据。下面将详细阐述它们的异同以及如何在集群环境中进行共享。 首先,Cookie 是一...
在这个"asp.net-c#写的一个cookie和session登陆小实验"中,我们主要关注的是两种在Web开发中常用的用户状态管理技术:Cookie和Session。 Cookie是服务器在客户端(用户浏览器)上存储的小型文本文件。它包含了特定...
标题与描述中的关键词“session和cookie区别”指向了两种在Web开发中常用的状态管理技术,它们各自具有独特的特性和用途。下面将详细阐述这两种技术的关键知识点: ### session和cookie的区别 **1. 定义与存储位置...
在处理用户登录和会话管理时,`session`和`cookie`是两个核心概念。本文将深入探讨`Flask`中的`session`和`cookie`,以及如何对它们进行解密。 首先,`session`和`cookie`都是用于跟踪用户状态的方法。`cookie`通常...
### Session与Cookie关系详解 ...- **Session**:用于服务器端存储用户会话状态数据,通过Cookie来跟踪客户端会话。 理解这两种技术的区别以及它们之间的协作方式对于构建健壮的Web应用程序至关重要。