我将描述一下登录和注册之间发生了什么,将场景分为客户端和服务端,服务器是Node.JS,客户端是由JS写的数据库
这是由客户端发送一个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('邮箱格式错误') } }) })
服务器须要检查发送过来的用户名是否注册过,若是注册过就返回失败,若是没有注册过就写入数据库浏览器
写入数据库成功,就将注册成功返回给用户安全
输入帐号密码,并用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('邮箱与密码不匹配') }) })
获取帐号密码,服务器查询数据库,看是否有对应的帐号存在post
若是有对应的存在就返回登陆成功,若是没有,就返回登陆失败网站
在上面的注册和登陆过程当中会有一些问题,网站是如何判断登陆与否的,有些页面只有登陆才能够访问,另外,如何来确认登陆的是谁,这样才不会搞混乱,这时就须要引入Cookie来解决这些问题spa
在登陆的一瞬间,服务器经过Set-Cookie,例如code
response.setHeader('Set-Cookie', `sign_in_email=${email}`)
告诉浏览器,在这个用户上作了个标记,之后只要相同的源的请求都会带上这个Cookie,服务器Set-Cookie的是什么,浏览器Cookie就会是什么。orm
Cookie并非永久有效的,就像游乐场的门票同样,你在游乐场去任何地方都须要这张门票,可是这个门票会有期限,这个期限能够本身设置,和关闭浏览器便失效的会话期Cookie不一样,持久性Cookie能够指定一个特定的过时时间(Expires)或有效期(Max-Age)。
response.setHeader('Set-Cookie', `id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT`)
当Cookie的过时时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。
关于Cookie的更多信息,能够在MDN上查看