【java】Session --- 服务器端会话技术

1. 会话技术

  1. 会话:一次会话中包含多次请求和响应。
    • 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
  2. 功能:在一次会话的范围内的多次请求间,共享数据
  3. 方式:
    1. 客户端会话技术:Cookie
    2. 服务器端会话技术:Session

2. Session

2.1 什么是Session?

Session是另一种记录客户状态的机制,不同的是 Cookie保存在客户端浏览器中,而Session保存在服务器上 。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

如果说Cookie机制是通过检查客户身上的"通行证"来确定客户身份的话,那么Session机制就是通过检查服务器上的"客户明细表"来确认客户身份。

Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

2.2 Session快速入门

1. 获取HttpSession对象:
	HttpSession session = request.getSession();
2. 使用HttpSession对象:
	Object getAttribute(String name)  
	void setAttribute(String name, Object value)
	void removeAttribute(String name)  

2.3 Session实现原理和机制

  • Session的实现是依赖于Cookie的。

当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session

  • 但是怎么才能区别这个session是我想访问的session?换句话说就是怎么才能找到我们之前创建的session?

就是当访问一个页面的时候给浏览器创建一个独一无二的号码,也给同时创建的session赋予同样的号码
(这个session值是通过cookie以响应头的形式发送到浏览器客户端,客户端本地cookie文件中会记录JSESSIONID值,方便下去访问服务器中所对应的session地址。)。
这样就可以在打开同一个网站的第二个页面时获取到第一个页面中session保留下来的对应信息(理解:当访问第二个页面时将号码同时传递到第二个页面。找到对应的session。)。这个号码也叫sessionID,session的ID号码,session的独一无二号码。

2.4 Session的细节

  1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
    • 默认情况下。不是。
      • 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
  1. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    • 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
* session的钝化:
	* 在服务器正常关闭之前,将session对象系列化到硬盘上
* session的活化:
	* 在服务器启动后,将session文件转化为内存中的session对象即可。

注意:IDEA不能完成上面的活化功能。因为IDEA重启tomcat时会删除之前的work目录然后新建。那么自然也就删除了之前的session文件。

  1. session什么时候被销毁?
    1. 服务器关闭
    2. session对象调用invalidate() 。
    3. session默认失效时间 30分钟
      选择性配置修改
可以修改配置文件web.xml
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

2.5 Session的特点和作用

  1. session用于存储一次会话的多次请求的数据,存在服务器端
  2. session可以存储任意类型,任意大小的数据
  • session与Cookie的区别:
    1. session存储数据在服务器端,Cookie在客户端
    2. session没有数据大小限制,Cookie有
    3. session数据安全,Cookie相对于不安全
发布了361 篇原创文章 · 获赞 127 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41879343/article/details/103921376
今日推荐