用户注册
1.用户输入一个用户名和密码
2.用户点击注册按钮,前端发送一个post请求,请求体中包含了数据
3.后端从请求体中得到数据,并将数据存入数据库
内部流程
1.能够获取用户的数据
监听表单的submit事件(表单默认事件会自动提交,不写action中的地址时,就会刷新页面,因此要先阻止默认事件)
有两种方法,第一种是把button的type改成button,覆盖默认事件,第二种是preventdefault。
2.使用ajax上传数据。
原生ajax
$('.registerForm').on('submit', (e) =>{e.preventDefault();const name = $('.registerForm').find('input[name=name]').val();const password = $('.registerForm').find('input[name=password]').val();const XHR = new XMLHttpRequest();let data = { name, password }XHR.open('POST', '/register')XHR.setRequestHeader('content-type', 'text/json')//post方法必须设置请求头XHR.send(JSON.stringify(data))//post方法需要带参数})
jquery
$.ajax(
{
method: 'POST',
contentType: 'text/json;charset=utf-8',
url: '/register',
data: JSON.stringify(data),
}).then(() =>
{
alert('成功注册')
location.href='xxx.com';//location.href是用来跳转页面,
//location.replace是替换当前页面,因此可以用来做页面跳转
})//判断成功后执行事件,可以用来跳转登录页面
3.后端中获取数据。
后端代码https://github.com/FrankFang/static-server-2/blob/master/server.js
用户登录
1.用户输入账号密码
2.前端获取账号密码,传给后端
3.后端验证数据库,返回结果给前端
问题:如何区分已登录用户?—-cookie
cookie是服务器下发给浏览器的一段字符串
浏览器必须保存这个cookie(除非用户删除)
之后发起同二级域名的请求(任何请求),浏览器必须附上cookie
类似于进剧场买票,通过查验票据来判断是否可以进入
通过在服务器中,响应头中设置cookie
使满足访问要求的用户附加cookie信息
response.setHeader('set-cookie',cookie内容);
request.headers['cookie'];//获取cookie
这样就可以在服务器判断用户是否是已登录用户。
注意:用户如果清除了cookie,或者使用无痕模式,那么cookie就是undefined
可以通过document.cookie读取cookie(如果设置了httpOnly) 则前端无法获取cookie
cookie的更精准的设置
举个例子
response.setHeader('set-cookie','logined=1; HttpOnly');//这样浏览器就只读,不能使用js修改(document.cookie)
当然其他还有更多的设置方法
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
使用cookie保留用户id(安全问题)
我们可以在用户登录的时候,在服务器将用户id添加到cookie中,这样就可以在前端使用用户的id来显示出来
但是这样做有安全问题,他人如果得到了用户的id,可以使用开发者工具(appolication-cookie)来获取、修改。
解决方法
1.加密,给用户的id进行加密处理,然后再解密出来,但是这样如果被别人获取到了加密后的id,仍然可以一直使用它来冒充登录,进一步解决可以使用JWT。
2.在服务器中,对用户的数据加上一层外衣(例如随机数),每一次删除session并且再次随机生成,这样可以防止用户修改,就算拿到了也不能预测下一次的随机数,并且可以进一步限制用进一步限制用户尝试的次数,提高安全性。
