cookie和session总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jav_zhangwei/article/details/78647966
一、Cookie

a. cookie 是解决会话跟踪的一种机制,除了cookie还有Session


b. Cookie 实在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应信息头中附带传送给浏览器的一个小文本文件。


c. 一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器


d. 底层实现原理:WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器


二、用法
(1)获取cookie 先设置session="false"


(2)Cookie返回来的是数组。
Cookie[] cookies = request.getCookies();
if(cookies!=null&&cookies.length>0){
for(Cookie cookie:cookies){
out.println(cookie.getName()+":"+cookie.getValue());
out.println("<br>");
}
}else{
out.println("没有cookie就创建一个并且返回");
Cookie cookie = new Cookie("name","yangle");
response.addCookie(cookie);
 (3)cookie.setMaxAge(30);//以秒为单位,存活30s,为0表示立即删除该cookie,若为负数表示不存储。
(4)cookie必须是post方式
(5)Cookie的作用范围:可以作用当前目录和子目录,但不能作用与当前目录的上一级。 但是可以通过SetPath方法来设置Cookie的作用范围,其中"/"代表站点的根目录


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


一、HttpSession 的生命周期:
<!-- 什么时候创建?-->


(1)对于就是jsp:当浏览器访问服务端的任何一个jsp或servlet,不一定会立即创建一个HttpSession对象。因为
a. 如果客户端访问的第一个资源,若当前jsp page指定的session属性值为false,则服务器不会创建一个HttpSession对象
b. 若当前jsp不是客户端访问的第一个资源,且在其他页面已经创建了一个HttpSession对象,则当前jsp页面会返回一个会话的HttpSession对象,而不会创建一个新的HttpSession对象


(2)session = "false" 代表当前jsp页面禁用session隐含变量,但可以使用其它显示的HttpSession对象




(3)对于servlet:若Servlet是客户端访问的一个WEB应用的资源,则只有调用request.getSession()货request.getSession(true)才会创建对象


(4) 在Servlet如何获取HttpSession对象
a.request.getSession(boolean create) ,1)若create为false,若没有和当前jsp页面关联的HttpSession对象,则返回null;若有,则返回true  2)若create为true,一定返回HttpSession对象。若没有和当前jsp页面关联的HttpSession对象,则服务器创建一个新的HttpSession对象返回,若有,直接返回关联的。
b.request.getSession();等同于request.getSession(true)



<!--  什么时候销毁? -->


(1)session.invalidate();马上会使session失效
(2)服务器卸载了当前WEB应用
(3)超出HttpSession过期时间,也会被销毁;
a. session.setMaxInactiveInterval();单位为s
b.通过web.xml设置,单位为min
(4) 并不是关闭了浏览器就销毁了HttpSession




二、HttpSession的相关API


 (1)获取session对象:reqeust.getSession()、request.getSession(boolean )
 (2)属性相关的:setAttribute  getAttribute  remeoveAttribute
 (3)设置最大有效失效的:session.setMaxInactiveInterval() 
 (4)使HttpSession失效的  invalidate()


三、url重写


(1)在浏览器中不支持cookie的时间,可以与服务器保持连续会话
(2)将会话标识以参数形式附加在超链接的URL地址后面的技术称为URL重写

(3)response.encodeUrl("login.jsp")


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.绝对路径的问题:

(1)建议在开发过程中编写“绝对路径”:写绝对路径肯定没问题,但是相对路径可能有问题。

(2)在由sevlet转发到JSP页面时。此时浏览器地址栏上显示的是Servlet的路径。而若JSP页面的超链接还是相对于该JSP页面的地址,会出现路径混乱的问题。





2.绝对路径的定义:相对于当前WEB应用的根路径的路径。即任何的路径都必须带上contextPath


3.如何完成绝对路径的编写:若/代表的是站点的根目录,在其前面加上contextPath


4.java中的“/”到底代表什么


①。当前WEB应用的根路径:http://localhost:8080/CookieAndSession。 若"/"需交由Servlet容器来处理
>请求转发时候:request.getRequestDispatcher("/");
>web.xml文件中映射Servlet访问路径:


②。WEB站点的根路径:http://localhost:8080/。若"/"需交由浏览器来处理
>超链接href
>表单中的action 
>做请求重定向的时候:  




5.表单的重复提交问题

(1)重复提交的情况
     ①在表单提交到一个Servlet,而Servlet又通过请求转发的方式响应了jsp或者html页面,而此时地址栏还保留着Servlet的那个路径,在响应页面点击“刷新”。

     ② 在相应页面没有到达时,重复点击提交按钮。 一般在网络延时

     ③ 点击“返回”,在点击“提交”,如果返回后刷新,在提交,这不算表单提交

(2)如何避免表单的重复提交:在表单中做一个标记,提交到Servlet时,检查标记是否和预定义的标记一致。若一致则受理并销毁标记。若不一致或没有标记,则直接响应提示信息:“重复提交”
    
    >在原表单页面,生成一个随机值token
    >在原表单页面,把token值放入session属性中
    >在原标单页面,把token值放入到隐藏域中


    >在目标的Servlet中:获取session和隐藏域中的token值
    >比较两个值是否一致:若一致,受理请求,并且把session域中detoken值清除
    >若不一致,则响应“重复提交”





阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页