WEB核心【记录网站登录人数,记录用户名案例】Cookie技术实现

简介: 本篇讲两个案例(记录网站登录人数,记录用户名案例)用会话技术cookie进行实现。

案例1:记录网站登录人数

1.1:需求&分析



首先分析一波:

关键点:


因为request作用域太小,不能使用request传递


因为ServletContext作用域太大,使得多个用户的访问时间会相互覆盖,导致业务混乱,也不能用。


使用cookie,因为cookie针对的是某个浏览器的会话,一个浏览器cookie保存在该浏览器上,不同用户之间不会有影响。


流程图:(配个图详细理解一波)



1.2:代码实现

@WebServlet({"/d1"})

public class Demo1Servlet extends BaseServlet {

   public void visit() throws IOException {

       PrintWriter writer = getResponse().getWriter();

       //一、接收请求中的cookie,展示用户上次访问时间

       //1.1、获取浏览器发送的所有cookie

       Cookie[] arr = getRequest().getCookies();

       //1.2、查找是否存在lastVisitTime的cookie

       //1.2.1、设置一个cookie类型的开关 默认为null,不存在

       Cookie lastVisitTime = null;

       //1.2.2、只要数组arr不为null,遍历arr,查找名为lastVisitTime的cookie

       if(arr!=null){

           for (Cookie cookie : arr) {

               if(cookie.getName().equals("lastVisitTime")){

                   //1.2.3、如果找到了,把他赋值给开关

                   lastVisitTime = cookie;

                   break;

               }

           }

       }

       //1.3、如果存在该cookie,展示上次访问时间

       if(lastVisitTime!=null){

           writer.write("上次访问时间是:"+new Date(Long.parseLong(lastVisitTime.getValue())).toLocaleString());

       }else{

           //1.4、如果不存在该cookie,展示:第一次访问

           writer.write("您是第一次访问!");

       }

       //二、记录用户当前的访问时间,写出到响应头

       //2.1、获取当前时间的毫秒值

       long t = System.currentTimeMillis();

       //2.2、封装为cookie对象

       Cookie c = new Cookie("lastVisitTime", t + "");

       //2.3、设置cookie保存7天

       c.setMaxAge(60*60*24*7);

       //2.4、写出响应头

       getResponse().addCookie(c);

   }

}


小结:


request.getCookies();//如果cookie都不存在,Null


Cookie的value是字符串类型,其他类型必须先转字符串才能保存,中文进行URL编码


案例2:记录用户名案例【进阶】

效果图:记住用户名效果图

效果图:不记住用户名效果图



2.1:需求&分析



分析:


关键点:


request.getParameter("");

cookie技术。

URL编码

重定向: return "redirect:/userLogin.jsp";

<% %>

cookie   setMaxAge(0);

流程图:



2.2:代码

userLogin.jsp


<form method="post" action="/day11_1/hw">

   <input type="hidden" name="method" value="login"/>

   用户名:<input type="text" name="username" />

   密码:<input type="password" name="password"/>

   <input type="checkbox" name="remember" value="yes"/>记住用户名

   <input type="submit" value="登录"/>

</form>

HomeworkServlet


@WebServlet({"/hw"})

public class HomeworkServlet extends BaseServlet {

   public String login() throws UnsupportedEncodingException {

       //1、接收参数

       HttpServletRequest request = getRequest();

       String username = request.getParameter("username");

       String remember = request.getParameter("remember");

       //2、判断remember,判断是否需要记录用户名

       Cookie rememberUsername = new Cookie("rememberUsername","");

       if(remember!=null){

           //3、如果remember不为null,记录用户名

           rememberUsername.setValue(URLEncoder.encode(username,"utf-8"));

           rememberUsername.setMaxAge(60*60*24*7);

       }else{

           //4、如果remember为null,删除已记录的用户名

           rememberUsername.setMaxAge(0);

       }

       //5、将用户名cookie写出响应头

       getResponse().addCookie(rememberUsername);

       //6、重定向回userLogin.jsp

       return "redirect:/userLogin.jsp";

   }

}


userLogin.jsp


<%

   //获取cookie中保存的用户名

   //1、获取所有cookie

   Cookie[] arr = request.getCookies();

   String username = null;

   //2、寻找保存用户名的cookie

   if(arr!=null){

       for (Cookie c : arr) {

           if(c.getName().equals("rememberUsername")){

               //3、把用户名取出来

               username = c.getValue();

               break;

           }

       }

   }

   //4、对URL编码进行解码操作

   if(username!=null){

       username = URLDecoder.decode(username,"utf-8");

   }

%>

<form method="post" action="/day11_1/hw">

   <input type="hidden" name="method" value="login"/>

   用户名:<input type="text" name="username" value="<%=username==null?"":username%>"/>

   密码:<input type="password" name="password"/>

   <input type="checkbox" name="remember" value="yes"

       <%

           if(username!=null){

               //说明用户肯定勾选了记录用户名,该复选框直接回显勾选即可

               %>

               checked="checked"

               <%

           }

       %>

   />记住用户名

   <input type="submit" value="登录"/>

</form>


小结:


回显:html特性: 文本框 value


复选框/单选框  checked="checked"


文本域:内容体


选择框:selected="selected"


嵌套java脚本,进行if判断,对html特性进行回显。


相关文章
|
5月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
570 1
|
7月前
|
Web App开发 数据安全/隐私保护 Python
万能ck提取登录软件,京东贴吧淘宝拼多多cookie提取工具,python框架分享
这个框架使用了Selenium进行浏览器自动化操作,包含了京东和淘宝的登录示例。代码展示了如
|
10月前
|
数据采集 存储 Web App开发
如何避免爬虫因Cookie过期导致登录失效
如何避免爬虫因Cookie过期导致登录失效
|
7月前
|
存储 数据库 数据安全/隐私保护
抖音ck提取工具,快手小红书微博哔哩哔哩cookie提取登录软件,python框架
这个框架提供了完整的Cookie提取功能,支持抖音、快手、小红书、微博和哔哩哔哩平台。主要特点包括
|
8月前
|
API 开发工具 开发者
微博哔哩哔哩百度贴吧ck提取登录工具,cookie提取器登录软件,易语言版
易语言中基本的HTTP请求功能。实际开发中,建议使用各平台官方提供的SDK和API,遵守开发者协议
|
8月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
264 1
|
9月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
356 7
|
11月前
|
安全 大数据 数据挖掘
课时9:阿里云Web应用防火墙:全面保障网站的安全与可用性
阿里云Web应用防火墙(WAF)基于阿里巴巴十年攻防经验,提供全面的网站安全防护。它通过Web应用防护、CC攻击防护和业务风控,有效应对各类网络威胁,确保网站的安全与可用性。智能双引擎技术降低误报率,实时数据分析和虚拟补丁更新保障系统安全。WAF已成功护航多个重大活动,为企业提供高效、简便的安全解决方案。
327 0
|
人工智能 安全 物联网
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
343 6

热门文章

最新文章