• jsp中使用URL重写跟踪Session,浏览器不支持Cookie的解决方案


    http://blog.csdn.net/linbooooo1987/article/details/12843823

    大家都知道session关浏览器就会清除(即使sessionid会写到客户端的 cookie中),如果浏览器新建一个父窗口,在原窗口不关闭的情况下,共享一个sessionId。在一次会话中,session是基于cookie 的,也就是说当cookie被删除时,session又会创建。当客户端禁掉cookie时,就要通过URL重写获取sessionId,且 sessionId不会改变。

    HttpServletResponse接口提供了encodeURL(String url)实现URL地址重写。例如:
    <a href=”<%= response.encodeURL(“index.jsp?c=1&wd=Java”) %>”>Homepage</a>


    该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动输出来。如果客户端不支持Cookie,则会将用户Session的ID重写到URL中。重写后的输出可能是这样的:

    http://localhost:8080/xxx/index.jsp;jsessionid=091A82E070579D3FA881FE901E532422?c=1&wd=Java
    其中jsessionid后面跟的就是session.getId()的值,这样session就可以使用了。


    清掉request携带的所有cookie

    Cookie[] cookies = request.getCookies();
    for(int i = 0; i < cookies.length; i++){
       cookies[i].setMaxAge(0);
       response.addCookie(cookies[i]);
    }

    不管是encodeURL还是encodeRedirectURL都要判断是否需要添加sessionid  例如 String str=response.encodeURL("index.jsp"); 变量str保存的值为

    index.jsp;jsessionid=A9B0F04345178E7BDC3626EAF666D34C 如果没有禁用Cookie,刷新浏览器str为index.jsp.
    出现以上情况是因为session 与cookie 成对使用的.第一次访问页面时cookie中sessionid没有值(或者值为空)故encodeURL认为需要添加jsessionid需要传递session对象,重写了URL但是在没有禁用cookie浏览器中第一访问页面时cookies对象会保存sessionid 故再次刷新不再需要重写URL.

     

    session 对象能和客户建立意义对应的关系依赖于客户的浏览器是否支持cookie,如果客户的浏览器不支持的话,那么客户再不同网页之间的session对象可能 时互不相同的,因为服务器无法将ID存放到客户端,就不能建立session对象和客户的一一对应关系。可以通过URL重写来实现session对象的唯 一性。所谓URL重写就是当客户从一个页面重新连接到一个页面时,通过向这个新的URL添加参数,把session对象的id传过去,这样能够保证 session对象是完全相同的。可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重 写。

    eg:

    String str=response.encodeURL("hope.jsp");  //使用在jsp页面中。

    连接目标写成:<%=str%>即可。

    encodeURL()是本应用级别的,encodeRedirectURL()是跨应用的。  

     两者的区别:

    在使用重定向时,response.sendRedirect(response.encodeRedirectURL(***));时一定要使用encodeRedirectUrl();

    由于附加在URL中的session ID是动态产生的,对每一个用户是不同的,所以对于静态页面的相互跳转,URL重写机制无能为力。当然可以通过将静态页面转换为动态页面解决。


    方 法的执行:首先判断当前的Servlet是否执行了HttpSession对象的invalidate()方法(当前session是否失效,失效后重新 建立新的session),如果已经执行返回参数URL。接下来判断客户端是否禁用了Cookie,没有禁用直接返回参数URL,如果禁用,则在参数 URL中附加session ID,返回编码后的URL。

  • 相关阅读:
    数据结构与算法----->算法----->高级排序算法:基数排序
    数据结构与算法----->算法----->高级排序算法:希尔排序
    数据结构与算法----->算法----->高级排序算法:快速排序
    数据结构与算法----->算法----->简单排序算法:冒泡、选择、插入排序
    数据结构与算法----->数据结构----->图
    数据结构与算法----->数据结构----->红-黑树
    数据结构与算法----->数据结构----->2-3-4树以及外部存储
    数据结构与算法----->数据结构----->二叉树
    数据结构与算法----->数据结构----->堆
    myeclipse2014配置多个同版本的Tomcat
  • 原文地址:https://www.cnblogs.com/ttjava/p/3641038.html
Copyright © 2020-2023  润新知