Cookie和Session 登录

2023-11-13

Cookie 实现免登陆和Session

01、 需求说明
完成用户登录功能
登录成功后跳到成功页面,显示用户名
登录失败可以跳回登录页面
登录成功后后续操作均能显示当前登录的用户名
02、完成代码

DologinServlet.java

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
	//解决中文乱码
	req.setCharaterEncoding("utf-8");
	
    //[1]接受页面(前台的页面)的数据
    String uname = req.getParameter("uname");

    String pwd = req.getParameter("pwd");

    String ch = req.getParameter("ch");

    //[2]数据的处理--连接数据库作比较返回结果
    boolean  flag=false;
    if("是下他".equals(uname)&&"123".equals(pwd)){
         flag=true;
    }
    //[3]根据返回的结果给用户做出响应
     if(flag){
     	/**********Session实现欢迎xx登录***********/
     	
			//[A]获得session对象
			HttpSession session = req.getSession();
			//[B]把对应的值保存到session中
			session.setAttribute("uname",uname);

        /**********使用Cookie记住密码的操作***********/
         
         //[1]申请卡片  填写卡片的信息
         	//把uname 中文的字符串进行UTF-8格式的编码
         Cookie  cookie=new Cookie("u",URLEncoder.encode(uname, "utf-8"));
         Cookie  cookie2=new Cookie("p",pwd);
         //[2]规定卡片的使用规则
           //指定卡片的使用范围   --/  在当前服务器内都有效   /servlet04--只在当前项目中有效
           cookie.setPath("/");
           cookie2.setPath("/");

           //设置Cookie的有效的时间
           if("yes".equals(ch)){
               //勾选了记住我操作
               //设置cookie 有效的时间
               cookie.setMaxAge(60*60*24*10);
               cookie2.setMaxAge(60*60*24*10);
           }else{
               cookie.setMaxAge(0);
               cookie2.setMaxAge(0);
           }
         //[3]把卡片交给到用户手中
          resp.addCookie(cookie);
          resp.addCookie(cookie2);
        //登录成功
         resp.sendRedirect("/servlet04/success.jsp");
     }else{
        //登录失败
         req.setAttribute("msg","用户名和密码不匹配");
         req.getRequestDispatcher("/login.jsp").forward(req,resp);
     }
}

Login.jsp

<body>
    <%
        String  uname="";
        String  pwd="";
        String  ch="";
        //获得所有本地Cookie 内容
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
        for(Cookie  c :cookies){
            if("u".equals(c.getName())){
                // c--代表的就是用户名对应的Cookie对象
                  uname= URLDecoder.decode(c.getValue(),"utf-8");
                  ch="checked";
            }
            if("p".equals(c.getName())){
                // c--代表的就是密码对应的Cookie对象
                  pwd= c.getValue();
            }
        }
        }
    %>
    
    <h3>登录页面</h3>
   <form action="DoLogin">
          <p>
             用户名:<input type="text" id="uname" name="uname"  value="<%=uname%>"/>
          </p>
           <p>
             密码:<input type="text" name="pwd" value="<%=pwd%>"/>
           </p>
           <p>
            <input type="checkbox" name="ch" value="yes" <%=ch%> />记住密码
           </p>
           <p>
               <input type="submit"  value="登录"/>
           </p>
   </form>
</body>

success.jsp(登录成功界面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
    <base href= "<%=request.getContextPath() + "/" %>"
</head>
<body>
	<h3>成功页面<h3>
    输出的值:<%
		String uname = (String)session.getAttribute("uname");
		out.print(uname);
	%>
	<hr/>
	<a href= "update.jsp" >update.jsp</a>
	<hr/>
	JsessionID<%=session.getId() %>
	
</body>
</html>

update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>update.jsp</title>
    <base href= "<%=request.getContextPath() + "/" %>"
</head>
<body>
	<h3>成功页面<h3>
    输出的值:<%
		String uname = (String)session.getAttribute("uname");
		out.print(uname);
	%>
	
	<hr/>
	<a href= "delete.jsp" >delete.jsp</a>
	<hr/>
	JsessionID<%=session.getId() %>

</body>
</html>

delete.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>delete.jsp</title>
    <base href= "<%=request.getContextPath() + "/" %>"
</head>
<body>
	<h3>成功页面<h3>
    输出的值:<%
		String uname = (String)session.getAttribute("uname");
		out.print(uname);
	%>
	
	<hr/>
	JsessionID<%=session.getId() %>

</body>
</html>

03、理解示意图
cookie

在这里插入图片描述
session
在这里插入图片描述
04、Session 的失效时机
[1]Session.invalidate()
[2]超过最大非活动间隔时间
[3]关闭浏览器(该方式没有立刻结束session)
session失效的方式

[1]手动注销sesison
session.invalidate();
[2]超过session 活动的有效时间
Session 最大活动时间是30分钟,我们可以更改这个默认的时间
A、更改TomCat中web.xml中的配置
影响的是:所有项目中的所有session

 <session-config>
    <session-timeout>30</session-timeout>
 </session-config>

B、更改自己项目的web.xml
影响的是:当前项目的所有session

    <session-config>
     <session-timeout>40</session-timeout>
   </session-config>

C、更改当前项目的当前session 失效的时间
session.setMaxInactiveInterval(10);
[3]关闭浏览器
这种红方式只是把浏览器中保存到cookie 中的Jsession 给清除了
保存到服务器中的session并没有真正的消失

05、Session和Cookie的区别
cookie数据存放在客户端,session数据放在服务器上(sessionid可以通过cookie保存在客户端,也可以使用URL重写方式)
cookie不是很安全(可以加密),别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
Cookie的数据都以字符串的形式保存。Session中可以保存对象信息。
典型使用
Cookie:记住我 最近浏览商品 网页皮肤
session:登录信息 购物车(也可以使用Cookie)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cookie和Session 登录 的相关文章

  • JSP&EL表达式&MVC&三层结构综合案例

    文章目录 JSP 1 JSP 概述 2 JSP 快速入门 2 1 搭建环境 2 2 导入 JSP 依赖 2 3 创建 jsp 页面 2 4 编写代码 2 5 测试 3 JSP 原理 4 JSP 脚本 4 1 JSP 脚本分类 4 2 案例
  • JavaScript(7)本地存储,函数深入理解

    1 本地存储 1 1本地存储特性 数据存储在用户浏览器中 设置和读取数据方便 而且页面刷新不丢失数据 容量较大 sessionStorage约5M localStorage约20M 只能存储字符串 可以将对象JSON stringify 编
  • 详解Java四大作用域

    文章目录 四大作用域 1 pageContext 1 1定义 2 request 详解 2 1定义 2 2 request域对象的使用 2 3生命周期 2 4 获取请求头数据 3 session 详解 3 1定义 3 2 获取session
  • EasyPoi实现Excel数据导入

    EasyPoi是一个基于Java的Excel导入导出框架 主要提供了Excel读取 写入等基本功能 并且支持通过注解来定义Excel文件的格式 添加maven依赖
  • 【JavaWeb】Thymeleaf的简介与使用

    Thmeleaf MVC 为什么需要MVC 我们之前在书城项目第二阶段做登录的时候 曾经提出过优化登录失败后的处理 虽然说可以实现在登录失败之后跳转回到登录页面 并且展示失败信息 但是代码实在是太恶心了 根本没法维护 所以我们需要将视图展示
  • JDBC讲解

    SUN公司于1996年提供了一套访问数据库的标准Java类库 即JDBC 一 什么是JDBC JDBC的全称是Java数据库连接 Java Database Connectivity 它是一套用于执行SQL语句的Java API 应用程序可
  • JavaWeb之HTML和CSS

    标签命令汇总 tr 行 td 单元格 b 加粗 font 字体标签 br 换行 a 超链接标签 ul 无序标签列表 ol 有序标签列表 li list ul 无序标签列表 href 设置链接地址 一 概述 1 B S软件结构 JavaSE中
  • brew install mysql

    Mac安装MySQL Brew 以及修改默认密码 折腾了一大圈之后 得知需要安装MacOS的包管理器 HomeBrew 百度搜索macos安装homebrew 进入第一个CSDN大佬文章开始撸 安装HomeBrew教程 跟着教程把brew安
  • JSP、JSTL标签

  • 通俗易懂权限管理模块设计-Java

    最近一直在做CMS系统 发现一些内容其实都是重复出现的 例如权限管理模块 权限管理模块就是为了管理用户是否有权利访问某个权限 如果不能则拒绝访问 其实Java中已经有很成熟的权限管理框架 例如 Shiro Spring Security等
  • Java会话技术

    会话技术 会话指的是客户端浏览器和服务端之间的度偶次请求和响应 当打开浏览器 访问网站地址后 会话开始 当关闭浏览器 或者到了过期时间 会话结束 就像打电话只要不挂电话就是一次会话 会话过程中产生的数据可以通过会话技术Cookie Sess
  • json数据如何存入到cookie中,如何获取

    1 引入相对应的cookie js插件如下 例如 button click function var username input name username val var password input name password val
  • 转:Chrome浏览器查看网站登录 Cookie 信息的方法

    当我们使用自动签到等程序的时候一般都要用到网站Cookie 我们可以借助浏览器的扩展来获取Cookie信息 但其实通过浏览器本身的功能就可以查看Cookie信息 以Chrome类浏览器为例有以下三种方法 chrome浏览器 方法一 1 打开
  • 简单对比一下Cookie和Session的主要区别

    一句话总结 Cookie是检查用户身上的 通行证 来确认用户的身份 Session就是通过检查服务器上的 客户明细表 来确认用户的身份的 Session相当于在服务器中建立了一份 客户明细表 注释 300 20 4kb
  • Sping之自动注入-1

    最近终于能静下心来 一步步的学习Java Web开发 在学习的过程中 遇到太多的问题 一开始好些问题真是不知道怎么解决 在这里要非常感谢 Sping In Action 一书的作者 感谢他能写出此书 让我受益匪浅 您辛苦了 本着 相互学习
  • 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出

    使用 阿里巴巴的 EasyExcel 填充 excel模板导出 需要支持批量操作 即一个模板循环导出多份 在网上找了下其他大佬们的做法 没有找到想要的 很多都是要先生成excel文件 再压缩导出 但我不想这样做 想直接通过文件流的方式 直接
  • form表单中使用fileUpLoad上传文件

    在最近的项目中 需要对用户的头像就行上传 这里了解到使用appche的 大家可自行到mvn库搜索jar包名进行下载 这里需要注意的是代码中对参数的读取 正常情况下我么使用getparameter方法进行读取表单数据 但是因为在form中我们
  • JDK 8 List集合使用记录

    JDK8 的新特性给我们开发带来了很大的便利性 先声明 我没有系统的去学习 JDK8的这些所有新特性 本文只是记录一些我个人日常开发中常遇到的一些 JDK8 的新特性方法 1 提取对象集合中的某一属性集合 List lt 对象 gt gt
  • 【JavaWeb】网络原理初识

    网络原理初识 计算机网络的历史 局域网和广域网 网络组件中的重要设备 网络通信基础 基本概念 协议分层 OSI七层模型 TCP IP五层 或四层 模型 封装和分用 发送方 接收方 三层转发和二层转发 计算机网络的历史 计算机最初是为了打仗而
  • GraphQL 实现原理,不要被表象骗了

    GraphQL 实现原理 及实例 GraphQL是一种用于API的查询语言和运行时环境 它提供了一种描述数据的方式 客户端可以根据需要进行精确地获取所需的数据 下面是GraphQL的实现原理 类型系统 Type System GraphQL

随机推荐

  • 猿创征文|深聊MySQL,从入门到入坟之:应该是全网最详细的MySQL知识点汇总,必须收藏。

    MySQL详细知识点汇总 1 引言 2 MySQL知识点汇总 2 1 链接与断开 2 2 启动与创建服务 2 3 数据库操作 2 4 表操作 2 5 数据操作 2 6 字符集编码 2 7 数据类型 2 7 1 数值类型 2 7 2 字符串类
  • multipart/form-data的使用注意

    问题描述 事情是这样的 我在使用ajax FormData对象提交数据的时候 使用request setRequestHeader Content Type application x www form urlencoded 但服务端接受的
  • 用ACL实现防火墙功能

    目录 一 实验目的 二 实验环境 三 实验内容 实验步骤 测试数据等 1 打开Cisco Packet Tracer 6 0 按以下拓扑图接好线路 PC与Server的IP地址 掩码 网关配置 路由器连接配置 2 配置好设备的IP地址和静态
  • Java线程的5种状态及状态之间转换

    Java中的线程的生命周期大体可分为5种状态 1 新建 NEW 新创建了一个线程对象 2 可运行 RUNNABLE 线程对象创建后 其他线程 比如main线程 调用了该对象的start 方法 该状态的线程位于可运行线程池中 等待被线程调度选
  • 笔记/OSI七层模型

    层级 名称 功能 协议 设备 协议数据单元 7 应用层 为应用程序提供网络服务 对应用程序提供接口 HTTP 80 TCP 超文本传输 Telnet 23 TCP 远程登陆 FTP 20 21 TCP 文件传输 SMTP 25 TCP 简单
  • AD器件距离过近报错 AD修改丝印的距离间距

    今天画板子遇见了一个间距报错 图片如下 我当时想着 修改丝印的间距就可以了 查找了一些资料之后发现是这样修改 并且我将其修改到了0 但是结果还是如上图一样 报错 最后发现除此之外 我们还需要修改元件之间的电气距离 修改完成之后就OK
  • Thinkpad笔记本快捷键大全

    Thinkpad笔记本快捷键大全 FN F2 锁定屏幕 FN F3 关闭屏幕 FN F4 待机 FN F5 无线和蓝牙开关 FN F7 不同显示设备输出切换 FN F9 安全删除硬件 FN F12 休眠 FN 空格 放大 其实就是降低分辨率
  • JackSonUtil JSONArray转换工具

    import com fasterxml jackson core type TypeReference import com fasterxml jackson databind ObjectMapper public final cla
  • Ubuntu安装nginx到配置ssl证书

    1 命令安装nginx sudo apt get install nginx 配置文件默认在 etc nginx文件夹下面 可以编辑nginx conf 或者 sites enabled文件夹下面的默认配置文件 default 2 常用命令
  • linux定时删除文件或文件夹

    本文转载自 https blog csdn net jiangnan8710 article details 51849748 linux新人 个人记录以后备用 一 常用的命令 1 查询命令 find 在删除日志前 首先要做的是查找日志所在
  • dos命令之md详解及实例应用

    dos命令之md详解及实例应用 用来创建文件夹dos的命令只有md 其英文解释为 makedirectory在windows2000 xp vista win7使用方法及实例如下 在命令行窗口输入md 可得到一份帮助信息如下图 例1 如果在
  • python爬取整个网站的广告敏感词_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词 我们通常会使用 去屏蔽它 例如 尼玛 gt 一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中 这个时候我们就需要一定的手段去屏蔽这些敏感词 下面我来介绍一些简单版本的敏感词屏蔽
  • 全国首富排行居然有他?用Python采集全国富豪榜五百名。

    背景 今天刷到一则文章 就是国内某富豪花重金迎娶泰国某 皇后 可谓是有点颠覆了我的三观啊 有钱人都玩的这么花的吗 这里内容就不一一讲了 毕竟看咱文章的都是想来学技术的 那就废话不多说 开始干活 正文 相关模块 今天不用其他的什么模块 pyt
  • linux系统使用rsync做主备服务器文件同步

    根据本文档设置 可以实现备机自动同步主机中的文件 注意 此方式缺陷为 如果主机文件修改 但是文件大小无变化或者文件变小时 无法自动同步到备机中 只有主机中文件修改后变大或者名称修改才能自动同步 一 LINUX服务器间免密登录设置 先执行 u
  • Scaling Instruction-Finetuned Language Models

    Paper name Scaling Instruction Finetuned Language Models Paper Reading Note Paper URL https arxiv org pdf 2210 11416 pdf
  • 【NLP】pkuseg:一个多领域中文分词工具包

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 软考-嵌入式系统设计师-笔记:标准化知识

    文章目录 国际标准 国家标准 行业标准 企业标准基本知识 嵌入式系统相关标准 国际标准 国家标准 行业标准 企业标准基本知识 国际标准 有效期5年 ISO 标准号 杠 分标准号 冒号 发布年号 方括号中的内容可有可无 国家标准 GB 中国
  • Python爬取携程酒店信息

    代码 from selenium import webdriver from time import sleep import xlwt 进行excel操作 谷歌驱动 告诉电脑在哪打开浏览器 driver webdriver Chrome
  • cloudflare tunnel搭建网站

    文章目录 0 写在开头 1 一些准备工作 2 Cloudflare Tunnel 3 最后 0 写在开头 如果你刚接触web项目 想让你的项目部署在公网上 但只是兴趣使然 并不打算花费金钱长期运行 或许本博客对你会有所帮助 1 一些准备工作
  • Cookie和Session 登录

    Cookie 实现免登陆和Session 01 需求说明 完成用户登录功能 登录成功后跳到成功页面 显示用户名 登录失败可以跳回登录页面 登录成功后后续操作均能显示当前登录的用户名 02 完成代码 DologinServlet java O