简单实现cookie 、session

116 阅读1分钟

模拟注册

//json文件模拟一个数据库存储用户信息,数据结构如下,
{
    "id": 1,
    "name": "我是用户名",
    "password": "1234567"
}
//设置路由,/doRegister 接受post请求
//这里使用序列化(JSON.stringify),反序列化(JSON.parse),进行数据的增删模拟
if (path === '/doRegister' && request.method === 'POST'){
     let dataString = ''
    request.on('data', (data) => {
        dataString += data//拼接数据
    })
    request.on('end', () => {
        const data = JSON.parse(fs.readFileSync('./db/user.json').toString())
        const newUser = { id: data[data.length - 1]['id'] + 1, ...JSON.parse(dataString) }
        data.push(newUser)
        fs.writeFileSync('./db/user.json', JSON.stringify(data))//存入数据
        response.writeHead(200, { 'Content-Type': 'text/html' });
        response.end('成功');
    })
}
//ajax 发送post 请求
const $form = $('#register')//找到id 为register的元素
$form.on('submit', (e) => {//监听submit事件
    e.preventDefault()
    const name = $form.find('input[name=name]').val()//拿到value
    const password = $form.find('input[name=password]').val()
    $.ajax({//发送请求
        url: '/doRegister',
        data: JSON.stringify({ name, password }),
        method: 'POST',
        contentType: 'text/json;charset=UTF-8'
    }).then(res => {
        console.log(res)
        alert('注册成功')
        location.href = '/sign_in.html'
    })
})

模拟cookie

Cookie是服务器下发给浏览器的一段字符串
浏览器必须保存这个Cookie(除非用户删除)
之后发起相同二级域名请求时,浏览器必须附上Cookie

if (path === '/doRegister' && request.method === 'POST') {//注册对应路由
    let postData = ''
    request.on('data', (data) => {
        postData += data//数据拼接
    })
    request.on('end', () => {
        let userDB = JSON.parse(fs.readFileSync('./db/user.json').toString())//读取用json模拟的数据库文件
        postData = JSON.parse(postData)//转成对象
        const id = userDB[userDB.length - 1] && userDB[userDB.length - 1].id + 1 || 1
        userDB.push({ id, ...postData })
        fs.writeFileSync('./db/user.json', JSON.stringify(userDB))
        response.statusCode = 200
        const random = Math.randm
        response.setHeader('Set-Cookie', `sessionId=${id}`, 'HttpOnly')
        response.write('注册成功')
        response.end()
    })
}