软件测试中,我们经常会测试到的场景有自动登录功能、保存和清空浏览记录功能等,这些功能和我们经常提到的cookie和session紧密相关,针对这些场景的实现原理和测试点这边整理借鉴一些资料做一个简单的总结记录

先来看看在java Web工程中,cookie和session的在不同场景的开发实现原理

Cookie

饼干. 其实是一份小数据, 是服务器给客户端,并且存储在客户端上的一份小数据

应用场景

自动登录、浏览记录、购物车。

为什么要有这个Cookie

http的请求是无状态。 客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。 为了更好的用户体验,更好的交互 [自动登录],其实从公司层面讲,就是为了更好的收集用户习惯[大数据]

Cookie怎么用

简单使用:

  • 添加Cookie给客户端

    1. 在响应的时候,添加cookie

       Cookie cookie = new Cookie("aa", "bb");//给响应,添加一个cookieresponse.addCookie(cookie);
      
    2. 客户端收到的信息里面,响应头中多了一个字段 Set-Cookie

  • 获取客户端带过来的Cookie

      //获取客户端带过来的cookieCookie[] cookies = request.getCookies();if(cookies != null){for (Cookie c : cookies) {String cookieName = c.getName();String cookieValue = c.getValue();System.out.println(cookieName + " = "+ cookieValue);}}
    
  • 常用方法

      //关闭浏览器后,cookie就没有了。 ---> 针对没有设置cookie的有效期。//    expiry: 有效 以秒计算。//正值 : 表示 在这个数字过后,cookie将会失效。//负值: 关闭浏览器,那么cookie就失效, 默认值是 -1cookie.setMaxAge(60 * 60 * 24 * 7);//赋值新的值//cookie.setValue(newValue);//用于指定只有请求了指定的域名,才会带上该cookiecookie.setDomain(".softtest.com");//只有访问该域名下的cookieDemo的这个路径地址才会带cookiecookie.setPath("/CookieDemo");
    

例子一 显示最近访问的时间。

  1. 判断账号是否正确

  2. 如果正确,则获取cookie。 但是得到的cookie是一个数组, 我们要从数组里面找到我们想要的对象。

  3. 如果找到的对象为空,表明是第一次登录。那么要添加cookie

  4. 如果找到的对象不为空, 表明不是第一次登录。

     if("admin".equals(userName) && "123".equals(password)){//获取cookie last-name --- >Cookie [] cookies = request.getCookies();//从数组里面找出我们想要的cookieCookie cookie = CookieUtil.findCookie(cookies, "last");//是第一次登录,没有cookieif(cookie == null){Cookie c = new Cookie("last", System.currentTimeMillis()+"");c.setMaxAge(60*60); //一个小时response.addCookie(c);response.getWriter().write("欢迎您, "+userName);}else{//1. 去以前的cookie第二次登录,有cookielong lastVisitTime = Long.parseLong(cookie.getValue());//2. 输出到界面,response.getWriter().write("欢迎您, "+userName +",上次来访时间是:"+new Date(lastVisitTime));//3. 重置登录的时间cookie.setValue(System.currentTimeMillis()+"");response.addCookie(cookie);}}else{response.getWriter().write("登陆失败 ");}
    

例子二: 显示商品浏览记录。

分析

Jsp 里面使用Java代码

  • jsp

Java Server Pager —> 最终会翻译成一个类, 就是一个Servlet

  • 定义全局变量

    <%! int a = 99; %>

  • 定义局部变量

    <% int b = 999; %>

  • 在jsp页面上,显示 a 和 b的值,

    <%=a %>
    <%=b %>

jsp显示浏览记录

清除浏览记录

其实就是清除Cookie, 删除cookie是没有什么delete方法的。只有设置maxAge 为0 。

 Cookie cookie = new Cookie("history","");cookie.setMaxAge(0); //设置立即删除cookie.setPath("/CookieDemo02");response.addCookie(cookie);

Cookie总结

  1. 服务器给客户端发送过来的一小份数据,并且存放在客户端上。

  2. 获取cookie, 添加cookie

    request.getCookie();

    response.addCookie();

  3. Cookie分类

    会话Cookie
    默认情况下,关闭了浏览器,那么cookie就会消失。

    持久Cookie

     在一定时间内,都有效,并且会保存在客户端上。 cookie.setMaxAge(0); //设置立即删除cookie.setMaxAge(100); //100 秒
    

测试点提取参考

1、打开WEB系统后,在浏览器默认存储cookies的目录下看此cookies目录是否存在win10的默认路径:C:\Users\{你的帐号名}\AppData\Local\Microsoft\Windows\INetCookies C:\Users\{你的帐号名}\AppData\Local\Microsoft\Windows\INetCookies\Low
2、禁止使用Cookie设置浏览器禁止使用Cookie,访问网页后,是否会导致web系统无法正常运行,无法进行匿名访问;3、若是回话cookie,验证cookie是否失效,在关闭浏览器之后再重新登录是否还有上次操作的痕迹,cookie文件是否删除;4、持久cookiecookie未过期时,关闭浏览器退出后重新登录时是否保留上次操作的痕迹;cookie未过期时,刷新页面或者进行其他操作后,再次登录,检查cookie是否更新及更新的正确性。关闭浏览器待cookie过期后再次登录,是否还保留上次操作的痕迹;5、任意篡改Cookie的内容,检查系统是否可以正常登录或出现异常、数据错乱等。6、通过浏览器删除cookie后访问网页,是否还会保留上一次的操作痕迹;7、利用cookie来记录登录次数或登录时间时,记录结果是否正确;
  1. Cookie的安全问题。

由于Cookie会保存在客户端上,所以有安全隐患问题。 还有一个问题, Cookie的大小与个数有限制。 为了解决这个问题 —> Session .

Session

会话 , Session是基于Cookie的一种会话机制。 Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。 Session是,数据存放在服务器端。

  • 常用API

      //得到会话IDString id = session.getId();//存值session.setAttribute(name, value);//取值session.getAttribute(name);//移除值session.removeAttribute(name);
    
  • Session何时创建 , 何时销毁?

  • 创建

如果有在servlet里面调用了 request.getSession()

  • 销毁

session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。

  1. 关闭服务器
  1. session会话时间过期。 有效期过了,默认有效期: 30分钟。

例子三: 简单购物车。

CartServlet 代码

 response.setContentType("text/html;charset=utf-8");//1. 获取要添加到购物车的商品idint id = Integer.parseInt(request.getParameter("id")); // 0 - 1- 2 -3 -4 String [] names = {"Iphone7","小米6","三星Note8","魅族7" , "华为9"};//取到id对应的商品名称String name = names[id];//2. 获取购物车存放东西的session  Map<String , Integer>  iphoen7 3//把一个map对象存放到session里面去,并且保证只存一次。 Map<String, Integer> map = (Map<String, Integer>) request.getSession().getAttribute("cart");//session里面没有存放过任何东西。if(map == null){map = new LinkedHashMap<String , Integer>();request.getSession().setAttribute("cart", map);}//3. 判断购物车里面有没有该商品if(map.containsKey(name)){//在原来的值基础上  + 1 map.put(name, map.get(name) + 1 );}else{//没有购买过该商品,当前数量为1 。map.put(name, 1);}//4. 输出界面。(跳转)response.getWriter().write("<a href='product_list.jsp'><h3>继续购物</h3></a><br>");response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a>");

移除Session中的元素

 //强制干掉会话,里面存放的任何数据就都没有了。session.invalidate();//从session中移除某一个数据//session.removeAttribute("cart");

部分测试点提取参考

  • 功能

      直接在浏览器地址栏访问需要登录后才能访问的页面,是否可以访问成功;session未超时时,关闭浏览器后再次登录,是否保留了之前的操作痕迹;登录页面后,等待session超时后操作页面,是否任然可以正常访问;退出登录,再通过浏览器返回功能返回至登录前操作页面,是否可以返回或依然跳转至登录界面;这里再举一个本人在测试中遇到的一个典型的信息互窜案例:操作:同时打开两个页面并在两个tab中都登录A用户,这时连个tab页中也就都保存的是A的session;此时在一个tab页面退出其中一个A用户,登录B用户(session未失效);现在session做了覆盖,也就是两个页面中的session值都是B的session。这时在B用户这里执行操作;现象:B的数据信息在A的用户下也可以被查看,用户的数据信息发生的互窜
    
  • 性能

     如果用户频繁的访问包含分类信息的页面,每次都要去DB中获取分类信息,影响性能所以首页分类信息不要放入session中,否则并发量大的时候,占用内存大,影响性能
    

总结:

  • Cookie

    服务器给客户端发送一小份数据, 存放在客户端上。

    基本用法:

      添加cookie获取cookie。
    

    演练例子:

      1. 获取上一次访问时间2. 获取商品浏览记录。
    
  • 什么时候有cookie

    response.addCookie(new Cookie())

  • Cookie 分类

      会话Cookie关闭浏览器,就失效持久cookie存放在客户端上。 在指定的期限内有效。 setMaxAge();
    
  • Session

      也是基于cookie的一种会话技术,  数据存放存放在服务器端会在cookie里面添加一个字段 JSESSIONID . 是tomcat服务器生成。 setAttribute 存数据getAttribute 取数据removeAttribute  移除数据getSessionId();  获取会话idinvalidate() 强制让会话失效。
    
  • 创建和销毁

    ,调用request.getSesion创建

    服务器关闭 , 会话超时(30分)

setAttribute 存放的值, 在浏览器关闭后,还有没有。 有!,就算客户端把电脑砸了也还有。

软件测试自动登录、浏览记录方向原理——基于Cookie和Session的区别和应用场景相关推荐

  1. php实现最后登录时间,php实例之基于Cookie的登录表单和获取最后登录时间

    1,html部分 基于cookie的登录表单,密码提交页-www.jbxue.com action="CookieBasedPasswordLogin.php"> 请输入您的 ...

  2. 使用ApiPost测试接口时需要先登录的接口怎么办(基于Cookie)?

    在后台在开发.调试接口时,常常会遇到需要登陆才能请求的接口. 比如:获取登陆用户的收藏列表,此时,我们就需要模拟登陆状态进行接口调试了.如图: 今天,我们讲解利用ApiPost的环境变量,解决这种需要 ...

  3. 基于localStorge开发登录模块的记住密码与自动登录

    前沿||我是乐于分享,善于交流的鸟窝 先做写一篇关于登录模块中记住密码与自动登录的模块.鸟窝微信:jkxx123321 关于这个模块功能模块的由来,这是鸟大大的处女秀,为什么这么说呢?一天在群里,一个 ...

  4. cookie自动登录

    一.什么是用户自动登录? 对于我们的网站向已注册用户提供某些专门的服务,比如网上购物.在线下载.收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证. 如果用户经常访 ...

  5. 【网站密码管理不用愁】基础篇 • 利用selenium构建网站密码管理和自动登录神器

    文章目录 一.项目背景 二.前置必懂知识 [01]selenium基础知识 [02]了解HTML和CSS 三.用Python和selenium实现 [01]实现访问网站 [02]定位目标元素 四.Pa ...

  6. 华为2021实验室招聘自动驾驶等相关方向工程师 / 博士后

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 工作地点: 上海/杭州/深圳 任选 招聘岗位汇总 1.自动驾驶感知算 ...

  7. SSO单点登录学习总结(2)——基于Cookie+fliter单点登录实例

    1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置Cookie的域setDomain(&quo ...

  8. 求QQ自动登录解决方案

    QQ2010现在不支持命令行登录了,还有如果是模拟鼠标键盘的话,如何确定输入框的位置 先FindWindow找到登陆框,GetWindowRect就可以计算机了顶到有人帮忙解决为止 没人知道吗?现在有 ...

  9. Django 处理用户浏览记录

    当用户点击某一个产品时就会有一个产品浏览记录,记录存进session 里,因为浏览记录是多条,所以session存的应该是个列表 # 判断是否登录,在登录状态下操作 if user:# 先取sessi ...

  10. Cookie实现记住密码、自动登录

    前端代码 <form id="form" action="xxx" method="post"><div><i ...

最新文章

  1. 嵌入式和机械哪个好?机械转嵌入式好转吗?
  2. 5G 承载网 — 基于 SDN 的 5G 承载网
  3. solr6 mysql_solr6 从mysql上导入数据
  4. RTX3090 Super曝光:完整GA102核心加持、性能提升5%
  5. Android App性能优化十技巧
  6. 攻击者“完全自动化”发动NPM供应链攻击
  7. linux 程序 指定网卡,Linux socket绑定指定网卡实现负载均衡
  8. c语言 16进制编辑器,十六进制编辑器(010 Editor 32位)
  9. 基于STM32的智能小区安保管理系统设计
  10. 页面置换算法java_页面置换算法之Clock算法
  11. 三菱服务器显示003C,FX3U/FX3G系列PLC内置定位功能的当前值寄存器是什么?
  12. 无聊的时候氵一些小套路
  13. 用Excel体验梯度下降法计算函数极值
  14. MapReduce案例之天气分析
  15. 2017年国赛H题_远程幅频特性测试装置训练总结(硬件部分)
  16. 滚动轴承频谱分析详解
  17. oracle的空间字段、空间函数,空间数据类型
  18. .net android 推送消息,android – FCM(Firebase云消息传递)推送通知与Asp.Net
  19. 四六级重要单词(二)
  20. py系统学习笔记:第七阶段:网页编程基础:第二章:CSS3:23.文本、表格属性

热门文章

  1. java写宽带连接.adsl拨号,并且检测断线自动重新连接,更换ip
  2. 空中网创始人杨宁:忽悠就是融资能力
  3. 社群运营普遍存在的五个问题
  4. Win7任务管理器找不到进程怎么办
  5. elementui进度条如何设置_Progress 进度条
  6. (非常小白)浏览器输入阿里云外网ip无法访问
  7. MySqL数据库监听命令_Mysql数据库监听binlog
  8. MathType公式编辑器试用期到了怎么办?
  9. 【网络通讯开发系列】如何使用C语言编程通过UDP通讯解析域名
  10. websphere多应用域名绑定