Servlet——Session(1)之基础知识
2017-08-22 19:29
274 查看
Session之基础知识
思考两个问题: 1. 大家在网上买东西,张三和李四他们购买的商品不一样,他们的购物车中显示的商品也不一样,这是怎么实现的?
2. 不同的用户登录网站后,不管该用户浏览该网站的哪个页面,都可以显示登录人的名字,同样可以随时去查看自己的购物车中的商品,这是怎么实现的?
Session技术
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。当用户打开浏览器,访问某个网站操作session时,服务器就会在服务器的内存为该浏览器分配一个session对象,该session对象被这个浏览器独占。
这个session对象也可以看做是一个容器,session默认存在时间为30min,你可以修改。
看如下示意图:
Session可以用来做什么
网上商城中的购物车保存登录用户的信息
将某些数据放入到Session中,供同一用户的各个页面使用
防止用户非法登录到某个页面!
如何理解Session
session不是特别好理解,你可以把session看做是一容器类似于HashMap,有两列。每一行就是session的一个属性。 每个属性包含两个部分,一个是该属性的名字(String),另外一个是它的值(Object)
名字String | 值Object |
---|---|
结论:跟Cookie一样,这个值会更新,会替换为新的值
Session基本使用
得到session// 返回这个request绑定的session对象,如果没有,则创建一个 HttpSession session = request.getSession(); // 返回这个request绑定的session对象,如果没有,则根据create的值决定是否创建一个 HttpSession session = request.getSession(boolean create)1
2
3
4
1
2
3
4
2.向session中添加属性
session.setAttribute(String name,Object val);1
1
3.从s
4000
ession中得到某个属性
String value = session.getAttribute(String name);1
1
4.从session中删除某个属性
session.removeAttribute(String name);1
1
可以做如下测试:
Servlet1生成session,并放入属性,它的doGet方法:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //访问session[当发现没有session的时候,就会自动创建一个session] HttpSession session = request.getSession(); // 给该session放入属性 session.setAttribute("name", "小明"); session.setAttribute("age", "18"); //session的生命周期默认是30min,但是你也可以修改 //session.setMaxInactiveInterval(interval); out.println("创建了session,并放入了两个属性,name和age"); }1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
从Chrome浏览器打开Servlet1,可以看到结果:
Servlet2获取session,并读取属性,它的doGet方法:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 获取session HttpSession session = request.getSession(); String name = (String) session.getAttribute("name"); String age = (String) session.getAttribute("age"); out.println("name:"+name+"age:"+age); }1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
再从Chrome浏览器打开Servlet2,可以看到结果:
这是在同一个浏览器中打开的两个不同的标签页,那么如果我们换一个浏览器呢,比如换成MicroSoft Edge浏览器:
可以看到这时候name和age都是null,也就是没有从session对象中取出值,因为Edge浏览器并没有运行Servlet1来创建Session对象,上面的session对象是Chrome浏览器独占的。
要强调的是,因为session是存在于服务器的内存中的,所以session对象的值也是可以存放对象的,并不像Cookie一样,仅仅是字符串!
比如,我们可以把一个User对象放入session对象中:
// 创建对象 User user = new User(); user.setName("小猫"); user.setColor("红色"); session.setAttribute("cat", user);1
2
3
4
5
1
2
3
4
5
之后,我们可以从session对象中取出这个User对象:
// 获取User User user = (User)session.getAttribute("cat");1
2
1
2
Session生命周期
session中的属性的默认生命周期是30min,这个默认时间可以通过修改web.xml文件来修改这样修改:
1.在Tomcat根目录\conf\web.xml文件中修改:
<session-config> <session-timeout>30</session-timeout> </session-config>1
2
3
1
2
3
这样修改会对所有的web应用生效。
2.如果只需要对某一个web应用设置,则只需要修改对应web应用的web.xml文件。在这个web.xml文件中添加如上的代码,比如你要设置为10分钟,则添加:
<session-config> <session-timeout>10</session-timeout> </session-config>1
2
3
1
2
3
除了设置默认生命周期之外,最重要的是在程序中设置,调用
setMaxInacttiveInterval(int interval),这里的interval是以秒为单位的,而且这个方法设置的是发呆时间,比如你设置的是60秒,那么在这60秒之内如果你没有操作过session,它就会自动删除,如果你操作过,不管是设置属性还是读取属性,它都会从头开始计时。
session.setMaxInactiveInterval(60);1
1
这个应用很广:比如我们逛购物网站,如果我们登录成功并且一直在操作、浏览网页,那么这个会话(Session)就一直保持,也就是我们一直处于登录状态。而如果我们隔了一段时间没有逛这个网站了,那么再逛的时候就会看到自己是未登录状态,因为会话(Session)已经过期了。
如果重启Tomcat,或者reload自己的web应用,或者关机了,那么web应用的session就会失效,这个结论很明显,因为session是存在于服务器的内存中的。
另外,我们也可以通过函数来让session失效:
invalidate(),这个函数清除session,删除一切会话。它通常用于安全退出某个网站。
要注意的是,
invalidate()函数是清除所有session,如果你只要清除一个单个的属性,那么就要使用
session.removeAttribute()方法。
Session小结
1.session是存在服务器的内存中的 2.一个浏览器独享一个session域对象
3.session中可以存放多个属性
4.session中可以存放对象
5.如果session设置的属性存在重名,则会替换为新的值
转载来自:http://blog.csdn.net/gavin_john/article/details/51355292
相关文章推荐
- Servlet——Session(1)之基础知识
- Servlet基础知识(三)—— 会话机制Session,Session和Cookie的异同
- JSP基础知识(Servlet相关接口)
- JSP基础知识➣Cookie和Session(五)
- JAVA WEB SERVLET 基础知识点
- servlet 和 jsp基础知识复习
- Servlet复习(一):基础知识
- Servlet和JSP知识复习(2)Servlet基础
- TensorFlow基础知识5-会话(session)
- Servlet基础知识(四)——Servlet过滤器Filter
- Servlet基础知识
- Servlet基础知识
- PHP基础知识 - session和cookie的区别
- servlet基础知识1
- Servlet基础知识(1)
- servlet基础知识3
- Session基础知识
- Servlet基础知识
- C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session
- 【PHP基础知识】——cookie与session的区别