zoukankan      html  css  js  c++  java
  • javaweb开发中的session

        之前我们介绍的cookie是把用户的身份信息存在了客户端,而session说白了就是把用户的信息保存在了服务端。由于session是保存在了服务端,所以当用户关闭浏览器时session并不会消失。一般session保存在服务器的内存中当然也可以持久化到硬盘或者数据库中。session的默认过期时间是30分钟,过期的session会被服务器自动的销毁。注意如果大量的创建session可能导致服务器的内存溢出。

        一、session的创建流程

        当客户端浏览器访问服务器时,服务器会先检查该请求是否携带一个叫JESESSIONID的cookie,如果存在会根据JESESSIONID的cookie值获取存放在服务器端的session值;如果不存在会新建一个session然后把sessionId写到cookei中返回给浏览器,下次浏览器访问时就会携带这个cookie。

     图片的来源地址:http://blog.tommyyang.cn/img/session/processofsession.png

    在javaweb开发中我们使用HttpServlet对象获取session,session也是一个域对象可以通过setAttribute方法和getAttribute方法获取存储在session中的值。代码如下:

    public class TestSessionServlet extends HttpServlet{
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            HttpSession session = request.getSession();
            response.setCharacterEncoding("utf-8");
            response.setHeader("content-type","text/html;charset=UTF-8");
            PrintWriter writer =  response.getWriter();
            String loginName = (String) session.getAttribute("loginName");
            String sessionId = session.getId();
            if(StringUtils.isEmpty(loginName)){
                session.setAttribute("loginName","张三");
                writer.println("session中没有值!");
            }else{
                writer.println("loginName="+loginName);
            }
            writer.println("sessionId="+sessionId);
            writer.close();
            
        }
    }

    用户第一次访问时:

     服务端没有session会在给浏览器响应时添加一个cookie,当用户第二次访问时:

    会携带这个cookie。当浏览器被禁用cookie后服务器端可以通过重写URL地址实现sessionId的传递。在java中我们使用HttpServletResponse对象的encodeURL(java.lang.String url)方法和encodeRedirectURL(java.lang.String url)方法实现URL的重写,其中前者是对表单action和超链接的url地址进行重写,后者是对重定向后的地址进行重写。

        二、session的销毁

        session默认的过期时间是30分钟,当然这个过期时间也可以我们自己来修改但是我们一般不会修改session的过期时间而是手动让session失效只需要调用HttpSession对象的invalidate方法即可。

  • 相关阅读:
    Symantec Backup Exec Agent For Linux防火墙问题
    GConf error:Failed to contact configuration server
    【转载】latch: cache buffers chains
    MS SQL 监控错误日志的告警信息
    ORA-14450: attempt to access a transactional temp table already in use
    VMware下Windows Server 2012添加新磁盘
    fdisk添加分区引起的Linux Error: 22: Invalid argument
    shell脚本执行时报"bad interpreter: Text file busy"的解决方法
    你真的懂redis的数据结构了吗?redis内部数据结构和外部数据结构揭秘
    spring boot面试问题集锦
  • 原文地址:https://www.cnblogs.com/suyang-java/p/11505946.html
Copyright © 2011-2022 走看看