javaWeb(2)----cookie,session

cookie:

cookie.setMaxAge(expiry);  //设置cookie被浏览器保存的时间。 

expiry:单位秒,默认为-1

             expiry=-1:代表浏览器关闭后,也就是会话结束后,cookie就失效了,也就没有了。

             expiry>0:代表浏览器关闭后,cookie不会失效,仍然存在。并且会将cookie保存到硬盘中,直到设置时间过期才会被浏览器自动删除,

             expiry=0:删除cookie。不管是之前的expiry=-1还是expiry>0,当设置expiry=0时,cookie都会被浏览器给删除。

setPath("/");  //在该服务器下,任何项目,任何位置都能获取到cookie,

session:

    持久化session:将保存sessionid的JESSIONID保存在本地;如果不持久化,则session只保存在浏览器的内存里,关闭后session被删除

    session的生命周期:

                1、什么时候创建session?

                         session="false" 表示当前页面禁用session对象,但是可以使用HttpSession对象

    获取HttpSession对象:

                      1)、request.getSession(boolean create);

                          create为true:若没有HttpSession对象,创建一个关联当前页面的HttpSession对象,若有直接返回关联的,一定会返回HttpSession对象,

                          create为false:没有返回null,有返回true;

                      2)、request.getSession();没有参数的,等同于request.getSession(true);

                2、销毁HttpSession:

                      调用 session.invalidate(); HttpSession对象立即失效

                      调用 session.setMaxInactiveInterval(5); 五秒后HttpSession对象立即失效

                      在web.xml文件修改失效时间:Tomcat为全局设置(默认30分钟,单位为分钟),web应用的web.xml为局部

    HttpSession的常用方法:

                      session.getId();

                      session.setAttribute("key","value"); 设置属性

                      session.getAttribute("key"); 获取属性

    把cookie禁用了如何跟踪session:利用URL重写session跟踪

                     例:response.encodeUrl("hello.jsp");

                      encodeURL(java.lang.String url) 进行所有URL重写

      encodeRedirectURL(java.lang.String url) 进行重定向 URL重写

表单的重复提交:

属于重复提交:

            1)在表单提交到一个servlet,而servlet又通过请求转发的方式响应到JSP(HTML)页面,这时地址栏还保留着servlet的路径,在响应页面点击“刷新”;

            2)在响应页面没有到达时,重复点击提交按钮;

            3)点击返回,再点击提交;

不属于重复提交:

            点返回,再点击“刷新”原表单,再点击“提交”;

避免重复提交的方法:使用session

jsp页面代码:

<%
    String token=new java.util.Date().getTime()+"";
    session.setAttribute("token",token);
%>
<tr>
<td colspan="2"><input type="hidden" name="token" value="<%=token%>"></td>
</tr>

servlet代码:

        HttpSession session=request.getSession();
        String token=request.getParameter("token");
        Object tokenValue=session.getAttribute("token");
        if(tokenValue!=null && token.equals(tokenValue)) {
            session.removeAttribute("token");
        }else{
            response.sendRedirect(request.getContextPath()+"/session/token.jsp");
            //记得return,不然会发生两次重定向
            return;
        }

猜你喜欢

转载自www.cnblogs.com/Lemonades/p/10925324.html