zoukankan      html  css  js  c++  java
  • url override and HttpSession implements session

    背景

      HttpSession默认使用Cookie存储Session ID,如果在用户禁用浏览器Cookie的功能后,仍打算运用HttpSession来进行会话管理,那么可以搭配URL重写来实现。


    实现方法

      使用HttpServletResponse的encodeURL()方法协助产生URL。
      服务器端调用request.getSession()时,
      如果容器能从HTTP请求中取得带有Session ID的Cookie,则response.encodeURL()会将传入的URL原封不动地输出
      如果容器不能从HTTP请求中取得带有Session ID的Cookie时(通常是浏览器禁用Cookie的情况),response.encodeURL()会自动产生带有Session ID的URL


    注意

      在浏览器第一次请求网站时,容器并不知道浏览器是否禁用了Cookie,所以容器的做法是Cookie与URL重写两种方式并用来往客户端发送session Id。

      url重写实现HttpSession可以实现跨浏览器的会话管理。在HttpSession存活期间,只要有人取得当次的Session ID,在另一浏览器相同的URL附上Session ID,就可以取得同一个HttpSession对象。


    重定向

      HttpServletResponse上的encodeRedirectURL()方法,可以在要求浏览器重定向时,在URL上携带Session ID。


    Demo

    package com.test;
    
    import javax.servlet.annotation.WebServlet;
    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;
    
    @WebServlet("/url.session")
    public class URLOverrideHttpSession extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
    
            /**
             * 实现url重写来实现session,只需要两行代码
             * 1、获取session
             * 2、使用responce发送url
             *
             * 注意:这两行代码的顺序不可变
             */
            HttpSession session = request.getSession();
            out.println("<a href='" + response.encodeURL("url.session") + "'>提交</a>");
    
            out.close();
        }
    }

    测试方法

      测试过程中注意观察地址栏URl
      1、访问:127.0.0.1:8080/url.session
      2、点击“提交”
      3、关闭浏览器的cookie功能,再次测试

  • 相关阅读:
    使用php实现权限管理模块
    在Android手机上安装linux系统
    phpexcelreader超级简单使用
    Ci框架整合smarty模板引擎
    vcastr2.0插件超级简单使用
    如何让centos6.5在vm11里上网,连接网络?
    session跨域共享解决方案
    apache的 .htaccess文件的常用配置
    webbench的详细使用
    网站的压力测试
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10054557.html
Copyright © 2011-2022 走看看