zoukankan      html  css  js  c++  java
  • HttpSession 和URLRewriting

    在上面使用Cookie技术存储会话信息的时候发现Cookie存储的数据有限,而且每次需要客户端浏览器携带数据,导致网络的负载过大。因此如果需要存储相对大量的数据,那么可以直接将数据存储在服务器端,这样可以提高数据的访问速度。

    HttpSession技术就是将会话的数据存储在服务器端,便于开发者直接进行访问。

    获取HttpSession对象

    HttpSession getSession()                           ->如果有直接返回,如果没有直接创建并返回

    HttpSession getSession(boolean create)        -> true同上,false有返回,没有null

    总结:

    HttpSession技术底层需要借助Cookie存储服务器端为每一个用户创建的HttpSession对象的ID值,便于后面拿到该值获取服务器指定对象中值。

    现在实际的浏览器在启动多个同一个浏览器窗口,那么自动使用同一个Session对象。一旦Session的有效时间超过了半个小时那么Session自动销毁。

    SessionID 在客户端是存储在浏览器的内存中,并没有放入文件。经过测试,当关闭浏览器 再打开的时候访问session对象失效了。但是只有一个浏览器不关闭且打开另外的页面,能够访问到session对象。客户端中的sessionId保存在浏览器内存中

    以上的代码将用户的浏览记录存储在了session对象中,但是该对象是在服务器内存中的,且有有效的时间限制,如果时间到了,那么session就会被销毁。

    默认的时间为半个小时(30分钟)。

      配置Session的有效时间

    在每一个网站的web.xml中可以配置该网站创建的session对象的有效时间。注意的是配置时单位是分钟。

    Thread.slessp(毫秒单位)、Cookie.setMaxAge(秒单位)、session(分钟单位)

     多学一招:到底Session需要设置多长时间?

    该对象在服务器的内存中如果时间设置越长那么服务器的session对象就会越多。

    但是如果指定时间过短,存储的数据没有意义。

    推荐不要修改默认的session的过期时间。

    实战:假定你现在打开了当当网在购物,此时已经添加了3个商品,但是刚好来了一个客人需要聊天。等聊天结束后大发现再次单击购买的时候session过期了。

      Cookie的禁用

    Cookie可以利用客户端存储会话数据。

    HttpSession可以利用Cookie存储SessionID信息。

    其实在浏览器的设置中可以拒绝网站发送回来的Cookie信息。

    当选择组织所有Cookie的时候,sesion技术就不能用了。

    此时再访问以上的案例就会导致空指针异常出现。如果需要将网站修复,那么必须使用URLRewriting技术。

    URLRewriting技术

    分析以上问题的原因:

    服务器创建好了Session对象,但是由于浏览器禁止了Cookie的接收,那么服务器无法将创建好的Session的ID值以Set-Cookie的响应头方式发送给浏览器进行存储,那么在第二访问的时候也就不会懈怠SessionID,因此无法找到Session。

    常用的方法

    String encodeRedirectURL(String url)        ->给指定的重定向路径后添加Sessionid信息

    String encodeURL(String url)                     -> 给普通的URL地址添加Sessionid信息

    实施的原则:

    “将页面中的所有的URL地址全部使用以上方法进行重新编码”

      修改以上程序

    1. ListServlet.java

      String path = "/day08/store?num="+num;

      path = response.encodeURL(path);

      out.println("<a href='"+path+"'>"+name+"</a>");

    2. StoreQQServlet.java

    String path = "/day08/list";

    path = response.encodeRedirectURL(path);

    response.sendRedirect(path);

  • 相关阅读:
    cf-779E (拆位)
    石子游戏 (SG函数)
    [POI2017] Flappy Bird (思维题)
    Alice and Bob (SG函数)
    Red is good (DP)
    CodeVS-1669 (背包问题)
    GalaxyOJ-468 (LCA)
    BZOJ-1191 (二分图匹配)
    Reinforcement Learning 笔记(4)
    Reinforcement Learning 笔记(3)
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3733604.html
Copyright © 2011-2022 走看看