一、createsession简介
1、createsession是指在web应用程序中,在客户端和服务器建立一个新的会话,为用户提供交互式的互联网服务。 2、创建session,会给该用户分配唯一的一个sessionID,在服务端存储该sessionID对应的属性,用户可以通过sessionID来获取自己的属性。
//创建session
HttpSession session = request.getSession(true);
3、当第一次请求服务器资源时,服务器会检测该请求是否带有有效的sessionID,如果没有,会自动生成一个新的sessionID,并存储到Cookies中;如果带有有效的sessionID,会根据sessionID查询该session是否存在,如果不存在,会自动生成一个新的sessionID。
二、为什么使用createsession?
1、session可以存储用户的属性,为用户提供交互式互联网服务。 2、session可以跨页面传值,可以避免使用URL传值或者在服务器端存储全局变量的不安全性。 3、session可以为用户提供保存状态的机制,可以在用户登录后保持登录状态。
三、session会话管理
1. 创建session
//创建session
HttpSession session = request.getSession(true);
说明:如果没有会话,createSession(true)会创建一个session并将其绑定到session中,如果会话已经存在,它将返回引用而不创建新的session对象。
2. 获取已经存在的session
HttpSession session = request.getSession(false);
if(session == null) {
System.out.println("Session不存在");
}
说明:如果会话不存在,则返回null,不会创建新的会话。
3. 设置session的信息
session.setAttribute("name", "John");
说明:可以为session设置属性来保存用户信息。
4. 获取session的信息
String name = (String) session.getAttribute("name");
说明:可以通过getAttribute()方法来获取session中保存的属性。
5. 销毁session
session.invalidate();
说明:销毁session将清除session中的所有属性,并释放所有使用的资源。
四、session的一些问题
1. session超时问题
session存在时间过长,会占用服务器资源,也会有安全问题,因此需要设置session超时时间。
//设置session超时时间为30分钟
session.setMaxInactiveInterval(30 * 60);
说明:setMaxInactiveInterval()方法是设置session的过期时间,单位是秒,如果指定为0,则表示永远不会过期,如果没有设置,则一般会使用默认值。
2. session并发访问问题
在默认情况下,当一个客户端访问同一个session时,其他客户端需要等待。 例如,当用户在一个浏览器中打开多个标签,并同时请求同一个页面时,这些请求会同时发送到服务器,但是只有一个请求会先到达服务器,而其他请求将持续等待。这使得用户的体验变得不好,解决该问题的一种方法是使用“Session Clustering”技术。 Session Clustering是一种在多个服务器之间共享和同步session数据的技术,利用Session Clustering技术,多个服务器之间可以共享同一个session数据,即使其中的一个服务器宕机,也不会丢失session数据。
五、总结
createsession是web应用程序中非常常见和重要的组件之一,通过它可以为用户提供交互式的互联网服务,实现跨页面传值,保存用户状态等。然而,session也存在一些问题,例如超时和并发访问等,通过setMaxInactiveInterval()方法和Session Clustering技术可以解决这些问题。