cookie理解与实践【实现简单登录以及自动登录功能】
cookie理解
Cookie是由W3C组织提出,最早由netscape社区发展的一种机制
- http是无状态协议。当某次连接中数据提交完,连接会关闭,再次访问时,浏览器与服务器需要重新建立新的连接;
- cookie相当于浏览器访问服务器的通行证,服务器可以通过通行证确认用户信息。
cookie实践
下面使用cookie实现一个简易的自动登录功能:在登录页index.jsp中登录之后,重启浏览器后直接访问用户主页home.jsp会实现自动登录;登录条件未满足时(cookie过期),从home.jsp重定向至登录页index.jsp。
登录接口
- servlet
package com.leida;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Date;
public class Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
String userName = request.getParameter("userName");
String userPassword = request.getParameter("userPassword");
HttpSession session=request.getSession();
//暂且省略查找数据库的过程,直接验证
if(userName.equals("leida")&&userPassword.equals("123456")){
//设置cookie
Cookie cookie = new Cookie("verifyInfo",userName+"_"+userPassword);
cookie.setMaxAge(60);
response.addCookie(cookie);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("当前的系统时间是:"+new Date()+";登录成功,3秒后自动跳转"+session.getId());
//等待三秒后自动重定向到用户主页
response.setHeader("Refresh","3;URL=home.jsp");
}
//response.setContentType("text/html;charset=utf-8");
//response.getWriter().write("当前的系统时间是:"+new Date());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
}
前端
使用简单的表单
<form class="layui-form" action="/ServletDemo/login" id="form" method="post">
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" name="userName" lay-verify="title" autocomplete="off" placeholder="请输入用户名" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-block">
<input type="password" name="userPassword" lay-verify="pass" autocomplete="off" placeholder="请输入密码" class="layui-input">
</div>
</div>
<div class="layui-form-item" style="text-align: center">
<button type="submit" class="layui-btn" id="login" >登录</button>
</div>
</form>
自动登录
- 过程:直接访问home.jsp时进行身份验证;
- 思路:验证cookie信息,若用户名密码没有或者错误,则跳至index.jsp登录页,若验证通过,则自动登录;
- servlet如下
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies=request.getCookies();
boolean flag=false;
System.out.println(cookies.length);
for(int i=0;cookies!=null&&i<cookies.length;++i){
if(cookies[i].getName().equals("verifyInfo")){
String[] verifyInfo=cookies[i].getValue().split("_");
if(verifyInfo[0].equals("leida")&&verifyInfo[1].equals("123456")){
flag=true;
break;
}
}
}
System.out.println(flag);
if(flag==false){
//告诉客户端需要重定向
response.setHeader("REDIRECT", "true");
//给出重定向的路径
response.setHeader("location","index.jsp");
}
- 前端
正规做法应该是使用springMVC的拦截器。此处在前端使用ajax模拟身份验证和重定向这两个过程。
$(function(){
$.ajax({
type:"get",
url:"http://localhost:8080/ServletDemo/verifyLogin",
complete:function(jqxhr){
if("true" == jqxhr.getResponseHeader("REDIRECT")){ //若HEADER中含有REDIRECT说明后端想重定向,
var win = window;
while(win != win.top){
win = win.top;
}
win.location.href = jqxhr.getResponseHeader("location");//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
}
}
})
});
cookie理解与实践【实现简单登录以及自动登录功能】的更多相关文章
- spring boot:spring security给用户登录增加自动登录及图形验证码功能(spring boot 2.3.1)
一,图形验证码的用途? 1,什么是图形验证码? 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers ...
- java浏览器控件jxbrowser(简单demo模拟自动登录与点击)
写在前面: 老大让我写个脚本自动给他写dms有一段时间了,说实话当时不知道老大指的这个脚本是什么?毕竟是做web的,难道是写个数据库sql语句脚本吗?也就放在了一边.巧了,最近一个朋友说他之前写了个程 ...
- cookie、session及实现记住密码,自动登录
在登录帐号.密码框下,有三种帐号登录模式可供选择,用户可根据自己的具体情况选择其中一种适合自己的模式. 1.网吧模式:勾选网吧模式后,登录的帐号会在歪歪注销/退出的时候自动清除,不会留在登录框中,可以 ...
- 一个简单的app自动登录Python脚本案例
- andorid 应用第二次登录实现自动登录
前置条件是所有用户相关接口都走 https,非用户相关列表类数据走 http. 步骤 第一次登陆 getUserInfo 里带有一个长效 token,该长效 token 用来判断用户是否登陆和换取短 ...
- 移动端APP第一次登录和自动登录流程
App登陆保存数据流程App因为要实现自动登陆功能,所以必然要保存一些凭据,所以比较复杂. App登陆要实现的功能: 密码不会明文存储,并且不能反编绎解密: 在服务器端可以控制App端的登陆有效性,防 ...
- springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装
springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...
- 自动登录token过期问题
之前遇到的一个也不算棘手的问题,自动登录本地存储了token却无法登录到主页. 先说一下我自动登录的思路:在用户登录成功时,将 token 存入 cookie :当用户下次来到本网站,读取 cooki ...
- yii自动登录
在yii,登录页面选择记住密码,下次就会自动登陆 前些天,自己增加了一个web应用,但是发现虽然选择记住密码,没选退出,关闭浏览器,重新进入还会跳转到登陆页面 自动登录是利用cookie实现的 配置U ...
随机推荐
- 1042 字符统计 (20 分)C语言
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...
- js菜单栏切换
先来看看需要实现的需求: 这是某购物网站上经常看到的效果 我们把网页的模型抽象出来,下面是我实现的效果图: 源代码仅供大家参考,具体如下: <!DOCTYPE html> <html ...
- 小小知识点(十四)——Adobe photoshop cc 2018中简单抠图的一些基本操作
一 如何抠图 1. 右键弹出选择工具,随后鼠标左键选择快速选择工具 2.通过点击鼠标,选择想要的区域: Alt+鼠标右键 左右拖动鼠标可调整画笔大小 Alt+鼠标滑轮,可放大或缩小画布大小 ctrl ...
- sqlserver 存储过程调Api接口
--开启Sql Server 通讯配置-- sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO EXEC sp_co ...
- JVM之堆的体系结构
一.堆的体系结构 Heap 堆一个JVM 实例只存在一个堆内存,堆内存的大小是可以调节的.类加载器读取了类字节码文件后,需要把类.方法.常量.变最放到堆内存中,保存所有引用类型的真实信息,以便执行器执 ...
- 《【面试突击】— Redis篇》--Redis都有哪些数据类型?分别在哪些场景下使用比较合适?
能坚持别人不能坚持的,才能拥有别人不能拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>--Redis都有哪些数据类型?分别在哪些场景下使用 ...
- invalid expression: missing ) after argument list in xxx 或者 console.error(("[Vue warn]: " + msg + trace));
效果图: 此处错误原因 中文输入法的 逗号 导致 : 解决方案: 改为 英文输入法的 逗号
- 解决a标签点击会出现虚框现象
1.解决a标签点击会出现虚框现象. 当a标签获得焦点的时候,a标签的周围就会出现虚框,它不同于border,不占任何宽度,a失去焦点的时候就会消失,就是outline. 在遨游,Firefox ,IE ...
- Big Event
666DHG的大事记 2019.4.15 \(\text{ }\text{ }\text{ }\)注册洛谷 2019.8.10 \(\text{ }\text{ }\text{ }\)Luogu\(\ ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...