1.什么叫动态服务器
动态服务器就是访问数据库,静态服务器不访问数据库.
2.实现用户注册
2.1目标
用户注册一个账号,数据库增加一条数据
2.2思路
1.前端创建一个form表单,用户提交账号密码
2.前端监听submit事件
3.前端发送post请求,数据位于请求体
4.后端接收post请求
5.后端获取到账号和密码
6.后端储存数据
2.3代码实现
前端代码
//创建form表单
//引用jquery
后端代码(node写的)
else if (path === '/register' && method === 'POST') {
response.setHeader('Content-Type', 'text/html;charset=utf-8')
const userArray = JSON.parse(fs.readFileSync("./db/users.json"))
//把上传的数据放在数组里面,用户有可能分段上传数据
const array = []
//监听上传的数据
request.on('data', (chunk) => {
array.push(chunk)
})
request.on('end', () => {
//不同的数据合成字符串
const string = Buffer.concat(array).toString()
//变成对象
const obj = JSON.parse(string);
//ID为最后一个人的用户
const lastUser = userArray[userArray.length - 1]
const newUser = {
//id 为最后一个人用户的id+1
id: lastUser ? lastUser.id + 1 : 1,
name: obj.name,
password: obj.password
};
userArray.push(newUser)
//新的写到数据库里面
fs.writeFileSync('./db/users.json', JSON.stringify(userArray))
response.end('很好')
})
3.实现用户登录
3.1目标
1.首页home.html,当用户登录成功后可以显示用户的账号
2.登录页sign_in.html,用户提交账号和密码
3.如果登录成功跳转首页
3.2实现思路
1.前端创建一个form表单,用户提交账号密码
2.前端监听submit事件
3.前端发送post请求,数据位于请求体
4.后端接收post请求
5.后端获取到账号和密码
6.后端看是不是可以匹配到账号和密码
可是如果能匹配,后端需要标记已经登录,可是怎么标记?碰到问题了,所以目标应该小一点,标记已经登录,需要实现这个目标我们不得不说到cookie
4.1cookie
4.2Cookie定义
Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,浏览器必须保存这个Cookie,之后发起相同二级域名请求时,必须带上这个Cookie.Cookie就像公园的门票,有门票就是已经登录.
4.3创建Cookie
服务器使用 [Set-Cookie
] 响应头部向用户代理(一般是浏览器)发送 Cookie信息。一个简单的 Cookie 可能像这样:
Set-Cookie: =
4.4home.html如何知道谁登录了
可以用数据库里的id
[{"id":1,"name":"1111","password":"2222"},{"id":2,"name":"1111","password":"2222"},{"id":3,"name":"1111","password":"2222"},{"id":4,"name":"111","password":"44444"},{"id":5,"name":"1111","password":"2222"},{"id":6,"name":"2222","password":"5555"}]
可是问题来了,用户可以修改id,怎么解决这个问题?
5.防止篡改ID
5.1思路一:加密
将id加密发送给前端,后端读取id时解密,此方法可行,存在安全漏洞(加密后的内容可以无期限使用)解决办法:JWT
5.2把信息隐藏在服务器
1.把用户信息放在服务器的X里,再给信息一个随机id
2.把随机id发给浏览器
3.后端下次读取到id时,通过x[id]获取用户信息
为什么无法篡改id?
因为id很长,而且随机
这个X又叫session
代码实现:
登录页面