• 浅谈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>
  • 相关阅读:
    XSS 跨站脚本攻击之构造剖析(一)
    PHP 一个表单多个提交按钮,处理不同的业务逻辑
    Ajax 学习之动态获取,返回服务器的值
    Ajax 学习之获取服务器的值
    Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
    H5开发之Eclipes 编码乱码问题
    PHP 表单提交多行数据,显示多个submit
    PHP 输出表格单元格的数据之用表单的方式;
    PHP 读取逐条数据库记录,以及提交下拉菜单选项
    mysql多个TimeStamp设置(转)
  • 原文地址:https://www.cnblogs.com/awong18/p/13282830.html
Copyright © 2020-2023  润新知