Session相关知识

  1. 什么是Session

    当用户请求来自应用程序的Web页时,服务器会给每一个用户(浏览器)创建一个Session对象;
    用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去,默认情况下,只要浏览器没有关闭,这个Session就一直存在。

  2. Session的常用方法

    isNew()//判断是否是新创建的Session,一般在第一次访问的时候出现
    getid()//拿到session的ID
    getCreationTime()//当前session创建的时间
    getLastAccessedTime()//最近的一次访问这个session的时间。
    setAttribute()//设置Session的值
    getAttribute()//获取Session的值
    removeAttribute()//移除Session的值
    invalidate()//手动注销Session
    
  3. Session的应用

    //往session中添加数据
    package com.test.session;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class SessionDemon01 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //解决乱码问题
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
            //从请求中得到session
            HttpSession session = req.getSession();
    
            //往session中添加数据
            session.setAttribute("name","张三");
    
            //得到session的ID
            String id = session.getId();
    
            //判断session是否为新创建的
            if (session.isNew()){
                resp.getWriter().write("session创建成功,sessionID为"+id);
            }else{
                resp.getWriter().write("session已经在服务器中存在,sessionID为:"+id);
            }
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    //跨Servlet获取Session的值
    public class SessionDemon02 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //解决乱码问题
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
    
            HttpSession session = req.getSession();
            //通过键取出值
            String name = (String) session.getAttribute("name");
            resp.getWriter().write(name);
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    //注销Session,手动注销
    public class SessionDemon03 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            HttpSession session = req.getSession();
            session.removeAttribute("name");
            //手动注销
            session.invalidate();
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    //自动注销,在web.xml里加入<session-config>
    <session-config>
      <!--Session一分钟后失效-->
      <session-timeout>1</session-timeout>
    </session-config>
    
    
  4. Session和Cookie的区别

    • Cookie是把用户的数据写给用户的浏览器,由浏览器保存,可以保存多个
    • Cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
    • Cookie的有效期在cookie生成的时候设置进去
    • Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中
    • Session是把用户的数据写进用户独占的session中,服务器保存,登陆信息等重要信息存放入session
    • 如果主要考虑到安全应当使用session
posted @ 2024-05-07 19:49  Hanyta  阅读(6)  评论(0编辑  收藏  举报