5月3日cookie_session

1.域对象的作用时间的外延针对同一个web应用吗?


2.与session结合使用只是cookie作用的一部分.


3.域对象数据都没有写到硬盘,而cookie却写到客户端硬盘?
cookie分为两种:
1.默认级别cookie (会话级别,浏览器一旦关闭,cookie就会消失)
2.持久级别cookie (自定义有效时间)


public void setMaxAge(int expiry)


Sets the maximum age in seconds for this Cookie.


A positive value indicates that the cookie will expire after that many seconds have passed. 
Note that the value is the maximum age when the cookie will expire, not the cookie's current age.


A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits.
A zero value causes the cookie to be deleted. 


4.浏览器自动携带cookie是依据的path吗?
void setPath(java.lang.String uri)

         Specifies a path for the cookie to which the client should return the cookie.
5.cookie与请求参数有何区别?与其他请求头呢?
cookie是是一个类,请求参数是键值对,其他请求头也是键值对.cookie可以自定义自己的对象.


6.The servlet sends cookies to the browser by using the HttpServletResponse.addCookie
(javax.servlet.http.Cookie) method, which adds fields to HTTP response headers to send cookies to the browser,
 one at a time. The browser is expected to support 20 cookies for each Web server, 300 cookies total,
 and may limit cookie size to 4 KB each.


 7.域对象的作用时间和作用空间的顺序是相同的吗?
 8.cookie是属于哪个域?
 
 
 9.session对象只有一个,它是一个域对象,可以存储属性信息;通过request 的getSession()方法获取,通过setAttribute(属性名,属性值)来存储数据,
它的每一次更新都会生成一个新的数据指纹,通过(如base64)编码,将数据指纹编成一个字符串(密钥),作为Cookie对象 JSessionID 的值,存储在客户端
该cookie默认的有效时间是一个会话.所以每一次会话的结束,会导致这个密钥的丢失,进而导致无法访问上一个会话的session.
   cookie有多个
 
 10.
 cookie的有效空间与有效时间:
有效时间:
默认级别cookie : 一个会话持续时间
持久级别cookie : setMaxAge(秒数值) 设置的时间
有效空间:一个会话空间

 session的有效空间与有效时间:
有效时间:默认是持续30分钟没有被访问失效,在tomcat的web.xml中设置
有效空间:一个会话空间

 11.剖析:
由于cookie不是一个域对象,所以我们将cookie和session分开来分析:
我们完全可以把cookie看做一个特殊的对象,它可以存储"键值对",每一个cookie对象对应一个键值对信息,它的特殊之处在于:
1.如果是一个默认级别的cookie:它的有效空间是一个会话,有效时间也是一个会话,它在一个会话中被响应path的request共享,
cookie的setPath()设置了cookie在哪些路径上有效,一旦浏览器发出来一个请求,随着请求去的cookie就已经确定了,在服务器端
使用request对象.getCookies()获得设置到该路径上的所有cookie,我们通过cookie的name来找到我们想要的cookie,并获得其value值;
2.如果是一个持久级别cookie:它的有效空间是一个会话,它的有效时间是 setMaxAge(秒数值) 设置的时间 ...
cookie对象的产生: 使用其构造方法:
Cookie(String name, String value) 
          Constructs a cookie with a specified name and value.
cookie如何发送到浏览器:
servlet 通过使用 HttpServletResponse#addCookie(Cookie cookie)方法将 cookie 发送到浏览器,该方法将字段添加到 HTTP 响应头,
以便一次一个地将 cookie 发送到浏览器。浏览器应该支持每台 Web 服务器有 20 个 cookie,总共有 300 个 cookie,
并且可能将每个 cookie 的大小限定为 4 KB。 
cookie对象的销毁:
public void setMaxAge(int expiry)
设置 cookie 的最大生存时间,以秒为单位。 
正值表示 cookie 将在经过该值表示的秒数后过期。注意,该值是 cookie 过期的最大 生存时间,不是 cookie 的当前生存时间。 
负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除 cookie。 

 12.再来说说session:
Session对象是一个域对象,它有 Object getAttribute(String name)  
void setAttribute(String name, Object value) 
void removeAttribute(String name)        
三个域对象方法实现数据的 增加 获取 删除;

有cookie会话技术了,为什么还需要session技术?
?Cookie局限性:
?Cookie保存的数据是有个数和大小的限制的。
?数据是保存客户端浏览器上(相对不是很安全)。
?Session的优势
?Session没有个数和大小限制。
  数据是保存在服务器上(相对比较安全)。
Session的有效空间是一个会话,有效时间是:持续30分钟无访问时才被销毁,在一个会话中,session对象被所有request共享;
Session对象的产生: 
request的 getSession() 方法 
public HttpSession getSession()
返回与此请求关联的当前Session对象,如果该请求没有Session对象,则创建一个Session对象。 一旦Session对象创建
成功,服务器会自动给这个Session对象创建一个 访问的密钥Cookie对象,并将这个密钥自动添加到response中,这个密钥Cookie对象的
name是JSessionID , value 是访问Session对象的密钥; 我们看到的Session对象的产生是 request的 getSession() 方法,但其实
是request获取的session密钥,然后才能够访问到对应的Session对象;获得了对象,自然就可以获得对象中存储的属性信息了;
Session对象的销毁
public void invalidate()
使此会话无效,然后取消对任何绑定到它的对象的绑定。 

13.登录项目总结:
1.关于验证码部分:
1.创建登录页面jsp,其中验证码部分引用网络资源(其实就是生成验证码的servlet);在servlet中将
验证码内容存储到session中,当然也可以存储到cookie中;
2.我们在客户端文本框输入验证码,然后跟着请求传送到服务器端;服务端request.getParameter();
获得客户端输入验证码信息,该信息与session中(也可以是cookie中)的验证码信息进行比对,比对完成,
立即删除session中的验证码信息:removeAttribute(),删除验证码cookie:
setPath(路径不变), setMaxAge(0)或者 setMaxAge(负数)在浏览器关闭后销毁;
2.关于用户名记录部分:
每次登陆成功做一次判断,判断客户端时候要求对用户名做记录,如果客户端要求做记录,就将用户名保存
在cookie中,下次登陆时就直接读取cookie中的用户名,在登陆界面的用户名框显示${cookie.username.value}
3.退出:
我们在用户登录成功时将用户的私密信息放入到session中,所以在退出时将session中信息清除,因为session中的
信息可能我们无法一一记得,所以这个时候可以销毁销毁session:invalidate() ;
14.把cookie和session比作会员卡的例子,好好分析分析
15.所有四个域都是在服务器端用代码生成的:服务器要给浏览器发送数据:
      page域就是页面还没有出发时的容器; 默认就在jsp页面中;天生的;
  request域就是页面行走时随身带的容器; 默认和请求同时形成;请求触发生成;
  session域就是浏览器平台给提供的容器,你只要在这个浏览器里走,你随时可以得到这个容器;
默认没有,但是当你获取时会给你创建一个;获取时触发生成;
  servletContext域就是服务器平台的应用给页面提供的容器,你只要是访问这个服务器上的这个应用,
那么这个应用就会给你提供这个容器; 如果应用装载在服务器上,那么服务器开启时会触发生成这个容器;



猜你喜欢

转载自blog.csdn.net/weixin_36898943/article/details/80721686