• 浅谈Session技术


    浅谈Session技术

    我们通常会将Cookie和Session作为一个组来一起学习。他们之间存在着很大的共同点;

    在百度百科中,这样对Cookie和Session定义:

    Cookie:类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。(关键字:客户端)

    Session:称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。(关键字:服务器)

    Session和Cookie的区别:

    • Cookie是把用户的数据写给客户端浏览器,由客户端浏览器进行保存,并且可以有多个Cookie,成为Cookies;

    • Session是把用户的数据写到用户独占的Session中,由服务器端进行保存,并且为了不对服务器资源进行浪费,Session只保存一些比较重要的数据;

    • Session对象是由服务创建的。

    Session的使用场景

    • 保存一个登录用户的信息;

    • 保存购物网站的购物车信息;

    • 在使用某网站时经常需要使用到的数据,也将其保存在Session中。

    代码示例

    获取Session信息:

    package psl.wong.servlet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    import java.io.PrintWriter;
    public class SessionDemo01 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //解决浏览器乱码问题
            req.setCharacterEncoding("GBK");
            resp.setCharacterEncoding("GBK");
            PrintWriter writer = resp.getWriter();
            //创建一个Session
            HttpSession session = req.getSession();
            //给Session中存东西
            session.setAttribute("name","Hayden-wong");
            //获取Session的ID
            String sessionId = session.getId();
            //判断是否是一个新的Session
            if (session.isNew()){
                writer.write("这是一个新的Session,刚刚创建成功了,ID:"+sessionId);
            }else{
                writer.write("服务器已经存在此Session,ID:"+sessionId);
            }
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }

    设置session的手动过期:

    package psl.wong.servlet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    //移除Session
    public class SessionDemo02 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);
        }
    }

    设置session的自动过期(由web.xml实现):

    <!--设置session自动注销-->
    <session-config>
        <!--X分钟后session自动失效,以分钟为单位的。-->
        <session-timeout>1</session-timeout>
    </session-config>
  • 相关阅读:
    案例详解:MTU不一致导致主机和RAC不断重启
    近千人观看live,晚8点继续安排,2个CPU过高案例+1个文件数据删除案例->Oracle故障分析的方法论+DBA能力提升要领...
    一个模版让报表自动生成,领导:这才是数据分析人该干的事
    如何构造一个 SYN_SENT 状态的连接
    TCP 3次握手原理
    SpringCloud Alibaba微服务番外一
    socket bind 随机端口
    Yii项目Security加密解密类提取
    linux中iptables配置文件及命令详解详解
    linux中iptables配置文件及命令详解详解
  • 原文地址:https://www.cnblogs.com/awong18/p/13282830.html
Copyright © 2020-2023  润新知