您的位置:首页 > 其它

Cookie&&Seesion

2017-05-23 21:36 113 查看
回话技术

            回话的概念:

           日常生活来讲.会话就是两个人聊天. 聊天的前提,聊天双方需要有记忆力. 在聊的过程中,都是
基于之前聊的状态,继续往下聊.
我们javaweb中,浏览器和服务器也可以看作是双方在聊天(请求,响应). 浏览器服务器双方也需要
有"记忆力",保存之前的聊天状态.服务器和浏览器才可以完成会话.
     会话的范围:
两个从打招呼到两人互相道别.是一次会话.
打开网站,完成我们想做的需求,到关闭浏览器.是一次会话.
       Cookie: 让浏览器能够记录信息.
       Session:让服务器端能够记录信息.

//-----------------------------------------------------------------------------------

cookie 浏览器端记录信息的技术

基本操作
创建cookid
Cookie cookie = new Cookie(String key,String value);
发送cookie
response.addCookie(cookie);
获得cookie
Cookie cookie = null;

  
Cookie[] cookies =  request.getCookies();

if(cookies!=null && cookies.length>0){
for(Cookie c : cookies ){
if(c.getName().equals("remember")){
cookie = c;
}
}

cookie的细节

           1 关于浏览器能记住多久

          默认情况下

              浏览器会在关闭的时候删除cookie(回话结束时)

         手动设置        

                        c.setMaxAge(60*60*24*7*2);//告诉浏览器保存2周
c.setMaxAge(-1);// -1代表 在会话结束时删除cookie(默认情况)
c.setMaxAge(0);// 通常用于删除已经存在的cookie.使用一个寿命为0的cookie,覆盖要删除的cookie

                   

2>浏览器在什么情况下发送cookie(cookie的路径问题)
*cookie的默认路径就是 发送cookie的动态资源所在的上一级路径.
*如果 cookie路径是"/day10-cookie", 主机(域)是:localhost . 那么浏览器在访问cookie路径的所有子路径时会携带cookie.
http:/localhost:8080/day10-cookie/BServlet
会发送
http:/localhost:8080/day10-cookie/ABC/BCD/CServlet
会发送
http:/localhost:8080/day12/AServlet
不会发送
http:/www.baidu.com/day10-cookie/BServlet
不会发送
3>Cookie路径的设置
默认情况:
发送Cookie的资源所在路径.  
例如:  http:/localhost:8080/day9-cookie/CServlet  =>  /day9-cookie
手动设置:
c.setPath("/day09-cookie/ABC");
4>cookie的主机(域)设置 (了解)

默认情况:
发送Cookie的资源所在主机.
手动设置:
//自己当前是什么主机,你就只能设置为什么主机,或者主机名的一部分
//假设自己的主机是www.baidu.com那么可以如下设置:
c.setDomain(".baidu.com");
5> cookie删除的问题
删除cookie原理就是 使用一个寿命为0的cookie 覆盖需要删除的cookie.
如何覆盖cookie.?
需要 路径,键,主机 一致,即可覆盖.

6> 使用cookie记录中文键值对问题.
为什么不能直接使用中文?
因为http协议中,除正文部分都不得使用Latin码表以外的其他码表.
所以不管是cookie还是之前的Cotent-disposition.都不能直接使用中文.

汤姆 => %E3%E5%C2

1.使用 URLEncoder 对中文进行url编码
2.在获取cookie时,使用URLDecoder进行解码.

//---------------------------------------------------------------------------------------------------------------

Session 服务器端记录信息的技术

         操作

                     只需要掌握原理和学会如何获取session

            获得             request.getSession

            操作            getAttribute();
        setAttribute();
removeAttribute();
getAttributeNames();

               session的细节

            1>session在服务器端能保存多久

                 1.<session-config>
<session-timeout>30</session-timeout>
</session-config>

在tomcat/conf/web.xml 有如上配置. 该配置决定了session对象的有效存活时间为30分钟.

2.     在我们项目的web.xml中, 也可以加上如上配置.
区别就是影响的范围不同.在项目中配只影响当前项目.

     3.3.(了解). 在session对象中,还有如下方法. 该方法也是控制session对象 的有效存活时间的,单位是秒.   范围是只影响调用该方法的某个session. void setMaxInactiveInterval(int interval)         

             seesion的范围问题

               1>浏览器第一次访问服务器,服务器创建Seesion对象 回话开始

                2>浏览器关闭 保存seesionID的cookie丢失,回话结束

                         *session过期
 *手动销毁session

3>session中的其他方法.
//其他操作
System.out.println("session.isNew()"+session.isNew());// 判断session是否 是新的.
System.out.println("session.getCreationTime()"+new Date(session.getCreationTime()));//获得session的创建时间
System.out.println("session.getId()"+session.getId());//获得session的id
System.out.println("session.getLastAccessedTime()"+new Date(session.getLastAccessedTime()));//获得最后一次的访问时间
System.out.println("session.getMaxInactiveInterval()"+session.getMaxInactiveInterval());// 获得session的最大有效时间
session.setMaxInactiveInterval(60);//设置session的最大有效时间为60秒
session.invalidate();//需要记住: 立即让session销毁.

//---------------------------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: