• web 之 session


    Session?


    在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

    session 的标识是session id


    Session VS Cookie

    • Cookie是把用户的数据写给用户的浏览器。
    • Session技术把用户的数据写到用户独占的session中。
    • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

    常用API

    session.setAttribute() 把信息保存在session对象中
    session.getAttribute() 获取保存在session对象的信息
    removeAttribute() 将改session对象从会话中移除
    session.invalidate() 销毁该session对象
    getLastAccessedTime() 返回客户端最后一次与会话相关联的请求时间
    getMaxInactiveInterval() 以秒返回一个会话内的两个请求最大时间间隔
    setMaxInactiveInterval() 以秒为单位设置session的有效时间

    session的创建和销毁

     1、session在何时被创建 


        一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <%@page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。 

    //使用request对象的getSession()获取session,如果session不存在则创建一个
    HttpSession session = request.getSession();
    //获取session的Id
    String sessionId = session.getId();
    //判断session是不是新创建的
    if (session.isNew()) {
        response.getWriter().print("session创建成功,session的id是:"+sessionId);
    }else {
        response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
    }


     

        2、session何时被删除 

        综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)


    1. HttpSession 的生命周期:

    1). 什么时候创建 HttpSession 对象
    ①. 对于 JSP: 是否浏览器访问服务端的任何一个 JSP, 服务器都会立即创建一个 HttpSession 对象呢?
    不一定。
    > 若当前的 JSP 是客户端访问的当前 WEB 应用的第一个资源,且 JSP 的 page 指定的 session 属性值为 false,
    则服务器就不会为 JSP 创建一个 HttpSession 对象;

    > 若当前 JSP 不是客户端访问的当前 WEB 应用的第一个资源,且其他页面已经创建一个 HttpSession 对象,
    则服务器也不会为当前 JSP 页面创建一个 HttpSession 对象,而回会把和当前会话关联的那个 HttpSession 对象返回给当前的 JSP 页面.

    ②. 对于 Serlvet: 若 Serlvet 是客户端访问的第一个 WEB 应用的资源,
    则只有调用了 request.getSession() 或 request.getSession(true) 才会创建 HttpSession 对象

    2). page 指令的 session=“false“ 到底表示什么意思?

    > 当前 JSP 页面禁用 session 隐含变量!但可以使用其他的显式的 HttpSession 对象

    3). 在 Serlvet 中如何获取 HttpSession 对象?

    > request.getSession(boolean create):
    create 为 false, 若没有和当前 JSP 页面关联的 HttpSession 对象, 则返回 null; 若有, 则返回 true
    create 为 true, 一定返回一个 HttpSession 对象. 若没有和当前 JSP 页面关联的 HttpSession 对象, 则服务器创建一个新的
    HttpSession 对象返回, 若有, 直接返回关联的.

    > request.getSession(): 等同于 request.getSession(true)

    4). 什么时候销毁 HttpSession 对象:

    ①. 直接调用 HttpSession 的 invalidate() 方法: 该方法使 HttpSession 失效

    ②. 服务器卸载了当前 WEB 应用.

    ③. 超出 HttpSession 的过期时间.

    > 设置 HttpSession 的过期时间: session.setMaxInactiveInterval(5); 单位为秒

    > 在 web.xml 文件中设置 HttpSession 的过期时间: 单位为 分钟.

    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>

    ④. 并不是关闭了浏览器就销毁了 HttpSession.


    当cookie被禁用了可以使用URL重写

    URL重写

      response.encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写。
      response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写

  • 相关阅读:
    杨辉三角
    手动实现md5加密
    戳气球
    重构字符串
    四数相加 II
    背包问题 II
    组合总和 IV
    背包问题 V
    背包问题
    Win 10安装Python及环境变量配置
  • 原文地址:https://www.cnblogs.com/zero-vic/p/10125134.html
Copyright © 2020-2023  润新知