使用session记住用户登录信息

使用session记住用户登录信息


什么是session ?

也叫会话对象,是存储在服务器端用来识别用户的时域,用来记住用户的访问信息,这样用户下次访问时就能识别。

怎么使用session ?

通过HttpServletRequest对象获取

public class SessionServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter pw = resp.getWriter();
		// 从请求对象中获取session,如果没有则创建session
		HttpSession isession = req.getSession();
	
	}
}

作用

1.识别用户
2.存储信息

1.识别用户:

服务器创建session,产生sessionID,当用户访问时sessionID会保存在客户端cookie中
使用session记住用户登录信息_第1张图片

用户下次访问时就会带着sessionID,服务器就会找到对应的session,这样就可以识别用户了。

2.存储信息:

session也是域对象可以存储一些信息,交给服务器处理。
方法:

		//从请求对象中获取session,如果没有则创建session
		HttpSession isession = req.getSession();
		
		isession.setAttribute("username", "zhangsan");
		isession.setAttribute("password", "123");
		isession.setMaxInactiveInterval(60);//设置超时时间

例题

编写一个Servlet使用Session如下功能

  1. 当用户第一次访问时,显示:你好,游客。
  2. 提供一个文本框和按钮 让用户填用户 登录,登录也是提交到给本Servlet处理,登录后 页面显示 你好,xxxx.
  3. (不关闭浏览器)1分钟内刷新页面,显示 你好,xxxx.
  4. (不关闭浏览器)1分钟后刷新页面,显示:你好,游客。
package session_test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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

@WebServlet("/session")
public class SessionServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter pw = resp.getWriter();
		// 从请求对象中获取session,如果没有则创建session
		HttpSession isession = req.getSession();
		// 获取用户提交的数据
		String name = req.getParameter("username");
		String password = req.getParameter("password");
		
		
		

		pw.println("                                                    ");
		pw.println("                                                             ");
		pw.println("                                                             ");
		pw.println("                                             ");
		pw.println("Insert title here                                   ");
		pw.println("                                                            ");
		pw.println("                                                             ");
		pw.println("
"); pw.println("用户名:
"); pw.println("密码:
"); pw.println("
"); pw.println("
"); pw.println(" "); //判断session是不是新创建的 if (isession.isNew()) { pw.println("你好,游客"); } else { //服务器已存在该session //把用户输入放入session,用来比对用户下次输入信息 //判断session中是否已经有内容,如果有就不在存入,这样只能使用第一次记录的账号密码登陆,没有使用数据库 if(isession.getAttribute("username")==null&&isession.getAttribute("password")==null) { System.out.println("存入账号密码"); isession.setAttribute("username", name); isession.setAttribute("password", password); isession.setMaxInactiveInterval(60); }else { System.out.println("namegetAttribute"+isession.getAttribute("username")); System.out.println("namegetValue"+isession.getValue("username")); } //获取session中的账号和密码 String cusername = (String) isession.getAttribute("username"); String cpassword = (String) isession.getAttribute("password"); System.out.println("获取session中的账号和密码"); System.out.println(cusername); System.out.println(cpassword); System.out.println(isession.getId()); if(name.equals(cusername)&&password.equals(cpassword)) { pw.println("你好,"+cusername); } } pw.println(" "); pw.println(" "); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

运行结果

用户第一次访问:
使用session记住用户登录信息_第2张图片

cookie存储了sessionID:
使用session记住用户登录信息_第3张图片

输入账号密码再次登录
使用session记住用户登录信息_第4张图片

sessionID在超时时间内不会改变
使用session记住用户登录信息_第5张图片

用户输入其他账号密码,不能登录,因为session里已经有了账号和密码(“zhangsan”,“123”)


注意

session对象的getAttribute(“字段”)和getValue(“字段”)作用相同都是获取字段的值。getValue(“字段”)已经过时了,所以不建议使用。


生命周期

  • 创建:第一次执行request.getSession()时创建
  • 销毁:
    • 服务器(非正常)关闭时
    • session过期/失效(默认30分钟)

设置时间:
代码设置

session.setMaxInactiveInterval(60);

问题:时间的起算点 从何时开始计算30分钟?
从不操作服务器端的资源开始计时

可以在工程的web.xml中进行配置


        30

  • 手动销毁session
    session.invalidate();
    服务器关闭

作用范围:

默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象


Session技术
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID

你可能感兴趣的:(JAVA,session,会话)