前记

我将描述一下登陆和注册之间发生了什么,将场景分为客户端和服务端,服务器是Node.JS,客户端是由JS写的

注册

1、注册请求

这是由客户端发送一个POST请求给服务端,其中包含了用户名和密码

let $form = $('#signUpForm')
$form.on('submit', (e)=>{
e.preventDefault()
let hash = {}
let need = ['email', 'password', 'password_confirmation']
need.forEach((name)=>{
let value = $form.find(`[name=${name}]`).val()
hash[name] = value
})
$form.find('.error').each((index, span)=>{
$(span).text('')
})
$.post('/sign_up', hash)
.then((response)=>{
console.log(response)
}, (request)=>{
let {errors} = request.responseJSON
if(errors.email && errors.email === 'invalid'){
$form.find('[name="email"]').siblings('.error')
.text('邮箱格式错误')
}
})
})

2、服务器检查

服务器需要检查发送过来的用户名是否注册过,如果注册过就返回失败,如果没有注册过就写入数据库

3、返回

写入数据库成功,就将注册成功返回给用户

登录

1、输入账号密码

输入账号密码,并用POST发送给服务器,可以检查输入格式

let $form = $('#signInForm')
$form.on('submit', (e) => {
e.preventDefault()
let hash = {}
let need = ['email', 'password']
need.forEach((name) => {
let value = $form.find(`[name=${name}]`).val()
hash[name] = value
})
$form.find('.error').each((index, span) => {
$(span).text('')
})
$.post('/sign_in', hash)
.then((response) => {
window.location.href = '/'
}, (request) => {
alert('邮箱与密码不匹配')
})
})

2、服务器检查

获取账号密码,服务器查询数据库,看是否有对应的账号存在

3、返回

如果有对应的存在就返回登录成功,如果没有,就返回登录失败

Cookie

在上面的注册和登录过程中会有一些问题,网站是如何判断登录与否的,有些页面只有登录才可以访问,另外,如何来确认登录的是谁,这样才不会搞混乱,这时就需要引入Cookie来解决这些问题

设置Cookie

在登录的一瞬间,服务器通过Set-Cookie,例如

        response.setHeader('Set-Cookie', `sign_in_email=${email}`)

告诉浏览器,在这个用户上做了个标记,以后只要相同的源的请求都会带上这个Cookie,服务器Set-Cookie的是什么,浏览器Cookie就会是什么。

期限

Cookie并不是永久有效的,就像游乐场的门票一样,你在游乐场去任何地方都需要这张门票,但是这个门票会有期限,这个期限可以自己设置,和关闭浏览器便失效的会话期Cookie不同,持久性Cookie可以指定一个特定的过期时间(Expires)或有效期(Max-Age)。

response.setHeader('Set-Cookie', `id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT`)

当Cookie的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。

特点

  1. 服务器通过Set-Cookie响应头来设置Cookie
  2. 浏览器得到Cookie后,每次请求都会带上Cookie
  3. 服务器读取Cookie就知道登录用户的信息
  4. Cookie存在电脑上的一个秘密的文件位置
  5. Cookie并不安全,可以做假
  6. Cookie有效期的默认时间由浏览器决定,后端可以强制设置
  7. 不同浏览器上的Cookie不可以互通

关于Cookie的更多信息,可以在MDN上查看

注册和登录(关于Cookie)的更多相关文章

  1. 第一百八十七节,jQuery,知问前端--cookie 插件,注册成功后生成cookie,显示登录状态

    jQuery,知问前端--cookie 插件 学习要点: 1.使用 cookie 插件 2.注册直接登录 Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购 ...

  2. 网站跨站点单点登录实现--cookie

    至于什么是单点登录,举个例子,如果你登录了msn messenger,访问hotmail邮件就不用在此登录.一般单点登录都需要有一个独立的登录站点,一般具有独立的域名,专门的进行注册,登录,注销等操作 ...

  3. PC 端微信扫码注册和登录

    一.前言 先声明一下,本文所注重点为实现思路,代码及数据库设计主要为了展现思路,如果对代码效率有着苛刻要求的项目切勿照搬. 相信做过微信开发的人授权这块都没少做过,但是一般来说我们更多的是为移动端的网 ...

  4. ASP.NET Core Identity Hands On(2)——注册、登录、Claim

    上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...

  5. ASP.NET Core Identity 实战(2)——注册、登录、Claim

    上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...

  6. Net Core Identity 身份验证:注册、登录和注销 (简单示例)

    一.前言 一般我们自己的系统都会用自己设置的一套身份验证授权的代码,这次用net core的identity来完成简单的注册.登录和注销. 二.数据库 首先就是创建上下文,我这里简单的建了Users和 ...

  7. 实战django(一)--(你也能看懂的)注册与登录(带前端模板)

    先是具体目录:(主要是注意templates和static的位置),其中person文件夹是上一期实战的,不用理会,login是本节实战app 项目urls.py from django.contri ...

  8. 再学ajax--第二天 | 基于php+mysql+ajax的表单注册、登录、注销

    写在前面 ajax学习到了第二天,这次是用第一天封装的ajax函数,后端使用了php+mysql实现基本的注册,登录,注销. php是我前几个月get到的技能,我已经学习到了面向对象,知道各修饰符的含 ...

  9. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...

随机推荐

  1. .Net Core-3.0-新闻:宣告推出.NET Core 3.0 Preview 7

    ylbtech-.Net Core-3.0-新闻:宣告推出.NET Core 3.0 Preview 7  1.返回顶部 1. 今天,我们宣布推出.NET Core 3.0 Preview 7.我们已 ...

  2. 系统分析与设计HW8

    描述软件架构与框架之间的区别与联系 软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计.架构模式(style)是特定领域常见问题的解决方案. 框架是特定语言和技术的架构应用 ...

  3. 前端 CSS 继承性和层叠性

    CSS有两大特性:继承性和层叠性 前端 CSS的继承性 前端 CSS层叠性 CSS选择器优先级 前端 CSS 优先级 样式设置important

  4. 多线程16-SpinWait

        );             isCompleted = ));             isCompleted = );             isCompleted = true;    ...

  5. 【监控笔记】【2.4】SQL Server中的 Ring Buffer 诊断各种系统资源压力情况

    SQL Server 操作系统(SQLOS)负责管理特定于SQL Server的操作系统资源. 其中相关的动态管理试图sys.dm_os_ring_buffers将被标识为仅供参考.不提供支持.不保证 ...

  6. C++类中的函数重载

    1,本课程最初阶段就学习了函数重载,但是那时研究目标仅限于全局函数,到目前 为止我们学习了三种函数: 1,全局函数: 2,普通成员函数: 3,静态成员函数: 这三种不同类型的函数之间是否可以构成重载, ...

  7. c++ const 用法

    1.  修饰一般变量,const int a = 10;  表示此变量不能被修改,简单易懂,不多说 2.  修饰指针,主要是下面三种 const int *cp1 = &a;       // ...

  8. 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题

    链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...

  9. 2、数据类型和运算符——Java数据类型

    一.强类型语言和弱类型语言: 1.1 强类型语言 强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java..net .Pyt ...

  10. kotlin学习(9)注解

    我们一般使用类和函数要说明类和函数的确切名称.调用一个类,你需要知道它定义在哪个类中,还有它的名称和参数的类型. 注解和反射可以给你超越这个规则的能力,让你编写出使用事先未知的任意类的代码.注解赋予这 ...