session

cookie是解决了不同的发送请求的数据共享的问题,它是浏览器端的数据存储技术,而session是解决一个用户的不同请求的数据共享问题,是服务器端的数据存储技术。

用户使用浏览器第一次向服务器发送请求,服务器接收请求,调用相应的servlet处理,同时给用户创建一个session对象,用来保存用户请求处理的相关数据。并且将session对象的JSESSIONID以cookie的形式发送给浏览器进行存储(临时存储,浏览器关闭即失效)。用户再次发起请求时,请求信息会附带JSESSIONID,服务器进行处理时,会根据JSESSIONID返回对应的对象,这样就能取到需要用的数据。每个用户的JSESSIONID是不同的,这样就可以识别发送请求的是哪个用户。

请求一创建session对象,并以键值对的形式保存数据

package com.bjsxt.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionDemo extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		//设置请求编码格式
		req.setCharacterEncoding("utf-8");
		//设置响应编码格式
		resp.setContentType("text/html;charset=utf-8");
		//获取请求信息
		String name = "张三";
		//处理请求信息
			//创建session对象
			HttpSession hs = req.getSession();
			//获取JESSIONID
			System.out.println(hs.getId());
                        //存储数据
			hs.setAttribute("name", name);
		
	}
}

1.浏览器第一次访问,HttpSession hs = req.getSession();会检查请求中有没有JSESSIONID,没有,则创建session对象,并将其JSESSIONID以cookie的形式返回浏览器,让浏览器保存。

session_第1张图片

2.不关浏览器,重新访问,HttpSession hs = req.getSession();继续检查有没有JSESSIONID,发现请求中有,所以就不会新建session对象,所以产生的JSESSIONID也和上次相同(获取到了session对象),也就是同一个用户了。

session_第2张图片

3.关闭浏览器,重新打开,再次访问,发现产生了新的JSESSIONID,即又创建了新的session对象。

session_第3张图片

浏览器关闭,JSESSIONID就会失效,它是在一次回话中的,默认的保存时间为30分钟,就和我们经常遇到的网站,有时候过了30分钟没有任何操作(只有有一次请求,它是会重新计时的),就会让你重新登录,这就是因为JSESSIONID失效了。

HttpSession hs = req.getSession();它即是创建session对象,也是在获取session对象,视请求中有没有JSESSIONID而定。

4.hs.setAttribute("name", name);存储数据

请求二,取到上次的数据

package com.bjsxt.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionDeno2 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		HttpSession hs = req.getSession();
		System.out.println(hs.getAttribute("name"));
	}
}

5.hs.getAttribute("name")获取数据。

通过session机制,我们就通过不同的请求,获得了用户共享的数据


你可能感兴趣的:(Java)