热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎么学习并掌握session和cookie

这篇文章主要讲解了“怎么学习并掌握session和cookie”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来

这篇文章主要讲解了“怎么学习并掌握session和COOKIE”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么学习并掌握session和COOKIE”吧!

1. session和COOKIE学习

1.1. 技术的需求

  • 以京东未登录时添加购物车为例,在京东上购买东西(未登录)可以添加到购物车,这时候有个问题是京东如何存储没有登录的你添加的购物车物品?我们肯定想到域对象,request、ServletContext域对象

  • request对象有个问题:request是请求一次,产生一次,如果继续请求就会释放掉,也就是说request就有一个,就在本次请求中。这种特性显然是不行的,因为假如你添加了一个物品进入购物车,然后添加另一个物品,这是第二个请求,就会将第一个请求给覆盖掉。因此用request域对象来做购物车的添加是不可行的。

  • ServletContext域对象,这个也有问题,这个对象是全局的,不管谁添加购物车,都会集中在一起,在付账时会发现你会付账所有人添加的购物车,这显然是不可取的。

  • 我们的需求是:当我们添加一个物品到购物车时,我们可以多次添加。也就是说由服务器给我们创造一个个人空间,这就引出了另一个域对象session对象

1.2. 会话技术学习

  • 会话技术:从打开一个浏览器访问某个站点开始,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据。

  • 会话技术分为两种:COOKIE和session技术。COOKIE,数据存储到客户端本地,减少服务器存储压力,安全性不好,客户端可以清除COOKIE。session是将数据存储到服务器,安全性高,但是会增加服务器压力。

1.3. COOKIE技术学习

  • 服务器怎样将一个COOKIE写入客户端

  • 服务器怎样获取客户端携带的COOKIE

1.3.1. 服务器向客户端发送一个COOKIE
  1. 创建一个COOKIE对象

1COOKIE COOKIE=new COOKIE(String name,String Value);
  1. 为COOKIE设置持久化时间-----COOKIE信息在硬盘上保存的时间,时间到COOKIE会自动删除。如果不设置这个COOKIE就会存储在内存中,关闭浏览器COOKIE信息被清空了。

1COOKIE.setMaxAge(60*10);//10分钟
  1. 设置COOKIE携带路径,如果不设置,每次访问将携带所有网站的COOKIE会影响浏览器速度。

1COOKIE.setPath(String path);
1COOKIE.setPath("/WEB16/sendCOOKIE");//访问sendCOOKIE资源时才携带这个COOKIE
1COOKIE.setPath("/WEB16");//访问WEB16下的所有资源都可以携带COOKIE。

如果不设置携带路径,那么该COOKIE信息会在访问产生该COOKIE的web资源所在的路径都携带COOKIE信息。

  1. 向客户端发送COOKIE

1response.addCOOKIE(COOKIE COOKIE);
1.3.2. 从客户端获取COOKIE
  1. 获得客户端携带的COOKIE数据,通过getCOOKIEs()方法

1COOKIEs[] COOKIEs=request.getCOOKIEs();
  1. 遍历数组,用equals()方法获取想要的COOKIEs

1if(COOKIEs!=null){//用数组判断null可以 2            for(COOKIE COOKIE:COOKIEs){3            String COOKIEName=COOKIE.getName();4            if(COOKIEName.equals("name")){5                String COOKIEValue=COOKIE.getValue();6                System.out.println(COOKIEValue);7            }8        }9    }

1.4. 案例分析--通过COOKIE获取上次最后浏览时间

1.4.1. 向COOKIE中写入最后一次浏览时间
  1. 获取当前时间,并格式化时间

1Date date =new Date();2SimpleDateFormat format=new SimpleDataFormat("yyyy-MM-dd hh:mm:ss");3String currentTime=format.format(date);//格式化当前的时间
  1. 创建COOKIE记录最新的访问时间

1COOKIE COOKIE=new COOKIE("lastAccessTime",currentTime);2COOKIE.setMaxAge(60*10*500);//设置COOKIE存在时间3response.addConkie(COOKIE);//持久化COOKIE
  1. 从客户端获取COOKIE---lastAccessTime

 1String lastAccessTime=null; 2//从request中获取COOKIE 3COOKIE[] COOKIEs=request.getCOOKIEs(); 4if(COOKIEs!=null){ 5    for(COOKIE coo:COOKIEs){ 6        if("lastAccessTime".equals(coo.getName())){ 7            lastAccessTime=coo.getValue(); 8        } 9    }10}
  1. 判断是否为第一次问

1response.setContextType("text/html,charset=UTF-8");2if(lastAccessTime==null){3    response.getWriter().write("您是第一次访问");4}else{5    response.getWriter().write("您上次访问的时间是:"+lastAccessTime);6}

1.5. Session技术

1.5.1. session技术的实现原理
  1. session技术是将数据存储到服务器上,面临的问题有如何知道存储在服务器上的数据是你存储的数据。

    怎么学习并掌握session和COOKIE

  1. 由此可见session技术是基于COOKIE技术存储session编号----JSESSISION。

  2. 给服务器创建属于一个客户端的session区域,

  3. 向session区域中存取数据

1.5.2. 创建session会话
  1. session属于客户端私有的session区域,request.getSession()方法内部会自动判断,该客户端是否在服务器端已经存在session,如果该客户端在服务器上不存在session,那么就会创建一个新的session对象,如果该客户端已经存在session就会该session

1HttpSession session=request.getSession();2String id=session.getId();3response.getWriter().write("JESSIONID:"+id);//打印到浏览器上。
  1. 给session域中赋值

1session.setAttribute("name","jerry");
1.5.3. 关于session会话技术的面试题
  1. 重定向和转发的区别:

  • 重定向请求两次,转发请求一次。

  1. session会话的声明周期

创建: 第一次执行request.getSession()时创建。(服务器端在执行到request.getSession()时会查看COOKIE是否有sessionId,有就获取,没有就创建一个。)

销毁: 1)服务器关闭时。2)session过期失效(默认30分钟)可以在web.xml配置。

手动销毁:session.invalidate();

作用范围:默认在一次会话中,也就是说在一次会话中,任何资源公用一个session对象。

  1. 浏览器关闭,session就销毁了?

    不对,session域在服务器上,跟客户端无关,默认30分钟销毁。

1.5.4. session的持久化技术
  1. session为什么要持久化?

    比如启动一个浏览器,设置好参数后,关闭浏览器,重启,这些参数又丢失了。这不是很麻烦?就比如未登录的百度一样,设置了浏览记录不可见的参数,设置以后可以保证一段时间登陆百度看不到浏览记录,但是一段时间过去后又出现了浏览记录,我认为这就用到了session持久化的技术,除此之外验证码的校验也需要用到session技术,因为存放在request域中,一旦请求校验,就会丢失,如果存储在ServletContext()域中,就会成为全局的对象,整个登录该网站的验证码都会被加载进去,这就不符合技术规范了,因此session域是适合的域。

  2. session如何实现持久化?

    session持久化的实现靠的是COOKIE实现的。首先需要让COOKIE能够长期存储session的id号,那么就要设置COOKIE的存储时间,因为COOKIE能存储更长时间,关闭浏览器也不会立即消失,就可以重新获取COOKIE。

1String id=session.getId()//获取session的id2COOKIE COOKIE=new COOKIE("JSESSIONID",id);//创建一个COOKIE,其中

感谢各位的阅读,以上就是“怎么学习并掌握session和COOKIE”的内容了,经过本文的学习后,相信大家对怎么学习并掌握session和COOKIE这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 我正在尝试使用scrapycrallsingle运行完美运行的scrapy蜘蛛,但我无法在python脚本中运行它.主要问题是从不执行SingleBlogSpider.parse方 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  • 本文介绍了如何使用Java代码通过SimpleDateFormat类来获得只有年月日的Date对象,并解释了在日期格式化和解析过程中需要注意的问题。同时提供了示例代码和异常处理方法。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • XMLhttpREquest_Ajax技术总结之XmlHttpRequest
    Ajax1、 什么是ajax   ... [详细]
author-avatar
浪奔西安
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有