cookie小栗子-实现简单的身份验证
关于Cookie
Cookie是一种能够让网站Web服务器把少量数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术。
用来保存客户浏览器请求服务器页面的请求信息,可以在HTTP返回体里,通过设置Set-Cookie来告诉浏览器端所要存储的cookie
cookie所有浏览器都识别,并且会缓存到浏览器,虽然cookie保存在浏览器端,但是一般是在服务器端设置的
cookie是以键值对的形式保存(key=value),各个cookie之间一般是以“;”分隔
要表示唯一的一个cookie值需要加 name、domain、path
cookie是不可跨域的,他会根据域名来区分是向哪个服务器发送数据
cookie的默认生命周期是当浏览器关闭以后生命就结束,通过expires可以设置生命周期
let d = new Date();
d.setDate(d.getDate()+1);
d.setMinutes(d.getMinutes() + 5);
document.cookie = 'name = xh;' +'expires='+d;
设置cookie
document.cookie = 'name'+username
设置cookie都会调用tostring,可以通过JSON.parse转一下来解决
对于前端来说,种cookie就是给document设置了一个叫做cookie自定义的属性,这个属性能被所有浏览器识别并缓存在浏览器中
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
读取cookie
document.cookie
返回结果会把域中所有cookie都显示出来key=val;每个之间以分号 空格来分
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(arr[2]);
else
return null;
}
删除cookie
使用JavaScript清理Cookie找到该Cookie对应的Name对应的值,然后设置其为过期
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
cookie与session之间的区别:
cookie保存在浏览器端,session保存在服务器端
单个cookie保存的数据不能超过4kb,session大小没有限制
cookie的应用场景:
猜你喜欢、身份验证、每日推荐、免登录等等
下面是一个简单的身份验证的小栗子
<div id="login">
用户名:<input type="text" id="user">
密码:<input type="password" id="pw">
<br/>
<label>
十天免登录:
<input type="checkbox" id="cd">
</label>
<button id="btn">登录</button>
<button id="btn2">注册</button>
</div>
<div id="box" style="display: none">
<p id="txt"></p>
<button id="up">退出</button>
</div>
let sql = [
{
uv:'虾米',
pv:123456
},
{
uv:'网易云',
pv:123456
},
{
uv:'QQ',
pv:123456
},
{
uv:'酷狗',
pv:123456
}
]; if(getCookie('user')){
login.style.display = 'none';
box.style.display = 'block';
txt.innerHTML = '欢迎'+getCookie('user')+'回来!';
} up.onclick = function(){
rmCookie('user',getCookie('user'));
window.location.reload();
} btn.onclick = function(){
let uv = user.value;
let pv = pw.value; let obj = sql.find(e=>e.uv == uv);
//有数据
if(obj){
if(obj.pv == pv){
alert('登录成功');
if(cd.checked){
setCookie('user',obj.uv,{name:'date',time:10})
}else{
setCookie('user',obj.uv);
}
window.location.reload();
}else{
alert('用户名或密码错误');
}
}else{
alert('此用户不存在');
}
console.log(obj);
} //设置cookie
function getCookie(key){
let c = document.cookie.split('; ');
let on = false;
for(let i of c){
let arr = i.split('=');
if(arr[0] === key){
on = true;
return arr[1];
}
}
if(!on)return null;
}
//获取cookie
function setCookie(key,val,obj={}){
let d = new Date();
let {name,time} = obj;
switch(name){
case 'date' :
d.setDate(d.getDate() + time);
break;
case 'minu' :
d.setMinutes(d.getMinutes() + time);
break;
case 'hour' :
d.setHours(d.getHours() + time);
break;
}
document.cookie = key +'='+ JSON.stringify(val) + (obj.time?'; expires='+ d:'');
}
//删除cookie
function rmCookie(key,val){
setCookie(key,val,{name:'date',time:-1});
}
cookie小栗子-实现简单的身份验证的更多相关文章
- shiro 简单的身份验证 案例
Apache Shiro是Java的一个安全框架,Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. 简单的身份验证 项目目录: 首先,在shiro.ini里配置了用户名和 ...
- asp.net 简单的身份验证
1 通常我们希望已经通过身份验证的才能够登录到网站的后台管理界面,对于asp.net 介绍一种简单的身份验证方式 首先在webconfig文件中添加如下的代码 <!--身份验证--> &l ...
- ASP.NET Core 项目简单实现身份验证及鉴权
ASP.NET Core 身份验证及鉴权 目录 项目准备 身份验证 定义基本类型和接口 编写验证处理器 实现用户身份验证 权限鉴定 思路 编写过滤器类及相关接口 实现属性注入 实现用户权限鉴定 测试 ...
- Shiro进行简单的身份验证(二)
一个Realm数据源: shiro.ini: [users] wp=123456 main方法执行认证: package com.wp.shiro; import org.apache.shiro.S ...
- spring boot 2 + shiro 实现简单的身份验证例子
Shiro是一个功能强大且易于使用的Java安全框架,官网:https://shiro.apache.org/. 主要功能有身份验证.授权.加密和会话管理.其它特性有Web支持.缓存.测试支持.允许一 ...
- 使用 cookie 的身份验证和授权
前言 在上一章 学学 dotnet core 中的身份验证和授权-1-概念 中,我们大致明白了身份验证和授权两者的关系.那么在本文中,我们将使用 cookie 来做一个简单的身份验证和授权. 本文中我 ...
- 学学dotnet core中的身份验证和授权-1-概念
前言 身份验证: Authentication 授权: Authorization net core 中的身份验证和授权这两个部分,是相辅相成的.当初我在学在部分的时候,是看的 net core 官网 ...
- 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权
OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...
- asp.net core 3.x 身份验证-1涉及到的概念
前言 从本篇开始将围绕asp.net core身份验证写个小系列,希望你看完本系列后,脑子里对asp.net core的身份验证原理有个大致印象.至于身份验证是啥?与授权有啥联系?就不介绍了,太啰嗦. ...
随机推荐
- Saltstack_使用指南06_远程执行-指定目标
1. 主机规划 Targeting Minions文档 https://docs.saltstack.com/en/latest/contents.html 另请参见:自动化运维神器之saltstac ...
- LeetCode算法题-Poor Pigs(Java实现)
这是悦乐书的第235次更新,第248篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第102题(顺位题号是455).有1000个水桶,其中只有一个水桶含有毒药,其余的都没毒 ...
- java 面试题整理(不定期更新)
一.Java基础 1.Java面向对象的三个特征与含义 三大特征是:封装.继承和多态. 封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公 ...
- 基于开发者中心DevOps流水线快速上云
导读:“DevOps”这个词现在很流行,它具体指的是什么呢?本文介绍了DevOps和开发者中心DevOps流水线,图文并茂,解答您的疑惑. 那么DevOps是什么?开发者中心<DevOps流水线 ...
- Centos查看tomcat状态及操作
启动:一般是执行sh tomcat/bin/startup.sh 查看:执行ps -ef |grep tomcat 输出如下 www 5144 ...等等.Bootstrap start 说明tomc ...
- [转帖]Ansible 入门秘诀
Ansible 入门秘诀 作者: Jose Delarosa 译者: LCTT jdh8383 | 2019-03-08 09:24 收藏: 2 用 Ansible 自动化你的数据中心的关键点. ...
- 如何查看kernel社区的变更历史
kernel社区稳定版本的地址为: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ 如果我们想查找某一个文件,比如 ...
- JAVA多线程-初体验
一.线程和进程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 二.为什么使用多线程,哪些场景下使用 多线程的好处是提高程序 ...
- Go语言嵌入类型
一.什么是嵌入类型 先看如下代码: type user struct { name string email string } type admin struct { user // Embedded ...
- 洛谷P1776 宝物筛选
一道很好的单调队列优化多重背包入门题 令\(v[i]\)表示重量,\(w[i]\)表示价格 ,\(c[i]\)表示最多可放的数量,不难推出朴素的转移方程如下: \(f[i][j]=max\{f[i-1 ...