• 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方法即可。

  • 相关阅读:
    修复VirtualBox "This kernel requires the following features not present on the CPU: pae Unable to boot – please use a kernel appropriate for your CPU"
    前几天入手一大菠萝,写个初始化教程
    CentOS 安装 Mogodb(在线 && 离线)
    Mongodb中经常出现的错误(汇总)child process failed, exited with error number
    XShell删除键之类的不正常
    XFtp中文乱码解决
    Xshell不能连接SSH的解决(附Kali2.0 SSH连接)
    Virtual Box 工具栏(菜单栏)消失的解决方法
    Kali无法定位软件包的解决方案
    数据库备份相关
  • 原文地址:https://www.cnblogs.com/suyang-java/p/11505946.html
Copyright © 2020-2023  润新知