会话cookie,session

一、会话概述
            1、用户开一个浏览器,点击多个超链接,访问服务器的多个WEB资源,
                  然后关闭浏览器,整个过程称为一个会话
            2、学习会话要解决的问题:会话过程中的数据保存。
      
二、Cookie和HttpSession简介
            1、Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
                当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。
                这样,web资源处理的就是用户各自的数据了。
            2、Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器
                创建一个其独享的HttpSession对象,由于session为用户浏览器独享,所以用户在访问
                服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器
                中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
            3、区别:
                      Cookie是把用户的数据写给用户的浏览器
                      Session把用户的数据写到用户独占的session中
            
            
            

三、Cookie详细介绍
            javax.servlet.http.Cookie
            1、Cookie是什么?
                        一个小信息,由服务器写给浏览器的。由浏览器来保存。
                        客户端保存的Cookie信息,可以再次带给服务器。
                        
            2、Cookie的属性:
                        name: 必须的
                        value: 必须的
                        comment: 可选的。注释
                        domain:可选的。该Cookie所属的网站域名。(itcast.cn)默认值。
                        maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒
                                                    如果是0,说明要删除。
                                                    如果是Interger.MAX_VALUE 则是永久存储。
                        version:可选的。
                        path: 可选的。
                                  写Cookie的程序的访问路径是:http://localhost:8080/day07/servlet/CookieDemo1
                                      其中:localhost就是域名;
                                      未设置时的cookie的默认路径:/day07/servlet
                                                                         
                                  访问的地址的URI.startWith(cookie的路径),为true就带cookie
                                  
                                  比如IE存的cookie的路径是/day07
                                  现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1  带cookie
                                  现在访问的地址是:http://localhost:8080/day07/CookieDemo1               带
                                  
                                  比如IE存的cookie的路径是/day07/servlet/
                                  现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1  带
                                  现在访问的地址是:http://localhost:8080/day07/CookieDemo1               不带
                                  
                                  如果一个Cookie的路径设置成了/day07,意味着:当前应用下的所有资源浏览器都会带着它给服务器。                          
                        
            3、如何向客户端写Cookie:
                              HttpServletResponse.addCookie(javax.servlet.http.Cookie)
                            (就是写了一个响应消息头:Set-Cookie:cookie的信息)
                 特点:一个浏览器针对一个网站最多存20个Cookie;
                            最多存300个Cookie,每个Cookie的长度不能超过4KB。(稀缺)
            
            4、服务器得到客户端传来的Cookie的方法:
                            HttpServletRequest.getCookies()   (注:  是一个数组,不能获得单独的cookie)
                            例:取到指定的Cookie lastAccessTime的值,打印到页面上
                                  Cookie cs[] = request.getCookies();
                                  for (int i = 0; cs != null && i < cs.length; i++) {
                                          Cookie c = cs[i];
                                          if ("lastAccessTime".equals(c.getName())) {
                                                  String value = c.getValue();
                                                  out.print(new Date(time).toLocaleString());
                                          }
                                   }
                            
            5、如何区分Cookie:通过名称不行。
                            domain+path+name来区分的。
                            localhost/day07/servlet/lastAccessTime
                            
四、Cookie案例:
            5.1记住用户最后一次的访问时间,并清空指定cookie;                 
            5.2记住用户登录时的用户名
            5.3电商网站:记住用户商品的历史浏览记录


五、各种URL地址的写法
            相对路径
            绝对路径:(建议的)
            绝对路径怎么写?什么时候需要加上应用名称"/day07"?
            原则:地址是不是给服务器用的,如果是,"/"就代表着当前应用。如果是给客户端用的绝对路径要加上应用名称。
                       
            <link href=path/>                                           要加/day07
            <script src=path/>                                          要加/day07
            <img src=path/>                            要加/day07
            <a href=path/>                              要加/day07
            <form action=path/>                                     要加/day07
            RequestDispatcher.include(path)        不要加,"/"就代表着当前应用
            RequestDispatcher.forward(path)        不要加,"/"就代表着当前应用
            HttpServletResponse.sendRedirect(path) 要加/day07(请求重定向,浏览器的行为)
            ServletContext.getRealPath(path)          不要加,"/"就代表着当前应用

HttpSession概述及原理探讨
            得到HttpSession对象:
                  HttpServletRequest.getSession():
                          根据特殊Cookie(JSESSIONID=HttpSession对象的id,由服务器生成,唯一的)的取值,
                          在服务器的内存中根据id查找这个HttpSession对象,找到了,取出来继续服务;
                          没有找到,创建一个新的HttpSession对象。
                          注:  该sessionid可以有session.getId();获得;
                                    session在关闭浏览器后默认存在内存中半小时,可以自己配置
                  HttpServletRequest.getSession(boolean b):
                          如果b为true,与上面方法功能完全一致。如果为false,只查询。
                          
                         
                          
            例:
                     ServletA
                     HttpSession session = request.getSession();
                     session.setAttribute("p","ppp");
                     ServletB
                     HttpSession session = request.getSession();
                     String value = (String)session.getAttribute("p");
                     
                     // 摧毁HttpSession对象
                     request.getSession().invalidate();
                     // 只是删除了域中的一个绑定对象
                     request.getSession().removeAttribute("user");
                     
           
七、HttpSession案例(*****)
              完成用户的一次性登录(随机验证码验证)(*****)
              简单购物原理案例 (*****)
              防止表单的重复提交(Base64编码+MD5加密)(*****)
              java.util.UUID:通用的唯一标识符

八、客户端禁用Cookie后的会话数据保存问题 (*****)
                客户端禁用Cookie对http://localhost访问的无效
                解决办法:
                      url---->url;JSESSIONID=123:URL重写.必须对网站中的所有URL地址都重写。
                      HttpServletResponse.encodeURL(url):是一个智能方法。判断用户是否禁用了Cookie,
                                                                                         没有禁用,则不重写;禁用了就重写。

                网站主页:为了更好访问本网站,请不要禁用您的Cookie。

九、HttpSession对象的状态及转换(序列化) (*****)


1、如何更改内存中HttpSession对象的超时时间。
修改web.xml
<session-config>
<session-timeout>1</session-timeout><!--自然整数,单位是分钟-->
</session-config>

2、 javaBean中的类要实现Serializable接口





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值