• JavaWeb之Cookie&Session(六)


    简介

    现在每天整理笔记,第一是巩固知识,第二是把学过的变成自己的。虽然笔记内容很普通,但掌握能这些,变成自己的知识,也是挺不错的

    学习技巧

    Cookie和Session学习时,明白如何使用以及原理。剩下时间大量练习案例,增加对Cookie和Session的认识

    Cookie对象

    0. 会话管理

    会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话
    
    会话过程中要解决的问题
    每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据

    1. Cookie简介

    什么是cookie
    Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了
    
    特点
    保存在浏览器缓存中,不安全,300个,每隔cookie大小不超过4个
    浏览器要不要把cookie给服务器
    domain+path+name(只有name也相同,才能找到value)
    你的路径.startWith(domain+path):如果是以path开头,name也正确,此时就通过cookie请求头发给服务器
    
    底层实现:
    	服务器给客户端set-cookie: showtime=234212349

    2. 创建Cookie

    创建Cookie
    得到客户端发过来的Cookie
    Cookie []cookies= request.getCookies();   //cookie:name=value请求头
    服务器写回Cookie给浏览器
    Cookie cookie = new Cookie("name","value");
    response.addCookie(cookie实例);
    
    Cookie文件中数据存储格式
    showTime   1421718610521     localhost    /day09_00_showtime/servlet/
    name       value	     domain       path

    3. 能被访问的URL特点

    1.Cookie 能被访问要符合:MYURL.startWith(domain+path)完全匹配   然后再找name也匹配,此时才能访问到value
    
    http://localhost:8080/day09_00_showtime/servlet/abc/ShowTimeServletDemo5  //给
    http://localhost:8080/day10_00_cookie/servlet/ShowTimeServlet  //不给
    http://localhost:8080//day09_00_showtime/ShowTimeServlet    //不给
    
    2.给不给传cookie是由浏览器决定的,取决于MYURL.startWith(domain+path)完全匹配
    
    确定唯一Cookie
    domain+path+name
    localhost/day05_01_cookie/servlet/   + lastAccessTime

    4. Cookie中属性

    name:(必须)
    value:(必须)不能是中文
    maxage:(可选)最长存活时间.默认是会话。单位是秒
    path:(可选)路径
    	一个cookie的默认路径是:写cookie的那个servlet的访问路径。
    	写cookie的servlet的路径是:String path =/day05_01_cookie/servlet/
    如果访问的路径.startWith(path),浏览器就会把刚才写的cookie带给服务器。
    domain :(可选)域名
    comment:(可选)注释
    version:(可选)版本号

    5. 服务器与客户端读写Cookie

    服务器如何向客户端写Cookie:
    HttpServletResponse.addCookie(javax.servlet.http.Cookie)(实际上就是写了一个Set-Cookie的响应消息头)
    浏览器对于一个网站最多存20个cookie(Cookie的个数是有限的)
    	cookie总数不能超过300个。
    	每个Cookie大小不能超过4KB。
    
    服务器如何取出客户端带来的cookie:
    	HttpServletRequest.getCookies() (实际上就是获取 名字为cookie的请求消息头)

    Session对象

    1. HttpSession是什么

    servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。服务器能够以多种方式维护会话,比如使用 cookie 或重写 URL

    2. Session和Cookie区别

    Session和Cookie的主要区别在于:
    Cookie是把用户的数据写给用户的浏览器
    Session技术把用户的数据写到用户独占的session中
    Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
    不是访问一个页面就创建session,而是遇到语句request..getSession();就创建了一个session

    3. 获取Session

    这两种方法是一样的,先判断有没有,有直接返回,没有创建一个新的
    	HttpSession session =  request.getSession();
    	HttpSession session = request.getSession(true);
    
    只获取,没有返回null,少了一个创建的工作
    	HttpSession session = request.getSession(false);

    4. Session实现原理

    跟Cookie一样,只不过不发数据,发一个JSessionId的号码如果浏览器发送的JSessionId与服务器的JSessionId一样,说明是同一个Session,数据此时就存在这个Session中
    
    Set-cookie:JSESSIONID=23354354543543   响应头
    cookie:JSESSIONID=23354354543543       请求头
    
    Session就是把它当成一个域对象来用   (就是一次会话过程)
    内部维护了一个Map集合 
    	setAttribute("key",Object);
    	Object value = getAttribute(key);
    	removeAttribute(key);
    
    存活时间:30分钟(空闲的)会销毁------------>(具体配置,tomcat安装目录/conf/web.xml  ----搜索30)
    session.invalidate();//强制销毁

    5. 解决禁用Cookie后servlet共享数据导致的问题

    response. encodeRedirectURL(java.lang.String url) 
    用于对sendRedirect方法后的url地址进行重写。
    response. encodeURL(java.lang.String url)
    用于对表单action和超链接的url地址进行重写 

     

    案例(参考代码篇)

    Cookie案例
    显示时间
    保存用户名
    显示最近浏览记录
    
    Session案例
    使用Session完成用户登陆
    利用Session实现一次性验证码
    利用Session防止表单重复提交
    购物车
  • 相关阅读:
    FNDLOAD 迁移多语言的数据定义
    Failed to lock the main memory
    fnd_function.execute/app_navigate.execute区别
    EBS Form 高亮当前行/设置行背景色
    Fndload常用命令
    EBS Form中数据提交方式(COMMIT)
    隆回护照/港澳通行证办理流程
    浅析淘宝刷单--我们如何网购
    初识 Bootstrap
    框架、架构、设计模式
  • 原文地址:https://www.cnblogs.com/codingpark/p/4241976.html
Copyright © 2020-2023  润新知