前言我先描述一下登录和注册之间发生了什么,把场景分为client和server。服务端是Node.JS,客户端是JS写的注册1、注册请求这是客户端向服务端发送的POST请求,包含用户名和密码let$form=$('#signUpForm')$form.on('submit',(e)=>{e.preventDefault()lethash={}letneed=['email','password','password_confirmation']need.forEach((name)=>{让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)=>{让{errors}=request.responseJSONif(errors.email&&errors.email==='invalid'){$form.find('[name="email"]').siblings('.error').text('邮件格式错误')}})})2.服务器检查服务器需要检查发送的用户名是否已经注册。如果已经注册,则返回失败。如果还没有注册,就会写入数据库。3.退回成功,则将注册信息退回给用户。并使用POST发送到服务器,你可以检查输入格式let$form=$('#signInForm')$form.on('submit',(e)=>{e.preventDefault()lethash={}letneed=['email','password']need.forEach((name)=>{让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('Emailandpassworddonotmatch')})})2、服务端校验获取账号密码,服务端查询数据库是否有对应的账号。3.如果有对应的账号,则返回登录成功。只是返回登录失败Cookie在上面的注册登录过程中会出现一些问题,网站如何判断是否登录,有些页面只有登录后才能访问,如何确认谁在登录,所以为了不乱来,这时候就需要引入cookies来解决这些问题了。在登录的瞬间,服务器通过Set-Cookie告诉浏览器,比如response.setHeader('Set-Cookie',`sign_in_email=${email}`),给这个用户做一个标记。以后只要是同源的请求都会带上这个cookie,服务器端的Set-Cookie是什么,浏览器的Cookie会是什么?过期cookie不是永久性的,就像游乐场的门票一样,去游乐场的任何地方都需要这张票,但是这张票会有时间限制,这个时间限制可以自己设置,而那个session会关闭浏览器后过期与周期cookie不同,持久性cookie可以指定特定的过期时间(Expires)或有效期(Max-Age)。response.setHeader('Set-Cookie',`id=a3fWa;Expires=Wed,21Oct201507:28:00GMT`)设置cookie过期时间时,设置的日期时间只与客户端相关,而不是服务器端。特点服务器通过Set-Cookie响应头来设置cookie。浏览器拿到cookie后,每次请求都会带上cookie。服务器读取cookie并知道登录用户的信息存储在计算机上的秘密文件位置。Cookie不安全。你可以将假cookie有效期的默认时间由浏览器决定,后台可以强制在不同的浏览器上设置cookie,使它们无法相互通信。关于cookies的更多信息,您可以在MDN上查看