基于Redis的登录应用实践

专注于为中小企业提供做网站、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业惠济免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
Redis是一款高性能的内存数据库,支持多种数据类型,具备丰富的功能和优良的性能表现,广泛应用于缓存、队列、分布式锁等场景。本文将介绍如何基于Redis开发一个简单的登录应用,此应用可以实现用户注册、登录、退出等基本操作,并且使用Redis来存储登录状态,保证用户体验。
实现思路
用户注册:用户输入注册信息,包括账号、密码等信息,将这些信息提交给服务器。服务器将账号、密码、当前时间戳等信息合并为一个字符串,并将其作为键,将用户信息作为值,存储到Redis中。同时为了避免重复注册,需要在Redis中存储一个账号集合,将每个注册的账号存储在该集合中。
用户登录:用户输入账号、密码,将其提交给服务器。服务器在Redis中查找该账号对应的信息,如果存在则比对密码是否正确。如果账号和密码都正确,则在Redis中生成一个唯一的session id,并将该用户的登录状态存储到Redis中,同时将session id和用户信息一起作为值存储到Redis中,并设置session id对应的键的过期时间,通常设置为30分钟,这样可以避免登录状态过期时间过短或过长的问题。最后将session id返回给用户。
用户退出:用户点击退出按钮,将session id提交给服务器。服务器根据session id在Redis中查找对应的用户信息,并删除该信息,同时删除该session id对应的键,用户退出成功。
代码实现
本文将使用Node.js来实现登录应用,使用redis-py进行Redis操作。以下是服务器端的代码示例:
“`javascript
const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const redis = require(‘redis’);
const uuidv4 = require(‘uuid/v4’);
const app = express();
const client = redis.createClient();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// 用户注册
app.post(‘/register’, (req, res) => {
const { Username, password } = req.body;
const now = Date.now();
const key = `${username}:${password}:${now}`;
client.sadd(‘usernames’, username);
client.set(key, JSON.stringify({ username, password, registeredAt: now }));
res.send(‘注册成功!’);
});
// 用户登录
app.post(‘/login’, (req, res) => {
const { username, password } = req.body;
const key = `${username}:${password}:*`;
client.keys(key, (err, keys) => {
if (err) {
console.error(err);
return res.send(‘登录失败!’);
}
if (keys.length === 0) {
return res.send(‘用户名或密码错误!’);
}
const userKey = keys[0];
// 判断密码是否正确
client.get(userKey, (err, str) => {
if (err || !str) {
console.error(err);
return res.send(‘登录失败!’);
}
const user = JSON.parse(str);
if (user.password !== password) {
return res.send(‘用户名或密码错误!’);
}
// 向Redis中添加登录状态
const sessionId = uuidv4();
client.set(sessionId, user.username);
client.expire(sessionId, 1800);
res.cookie(‘sessionId’, sessionId);
res.send(‘登录成功!’);
});
});
});
// 用户退出
app.post(‘/logout’, (req, res) => {
const { sessionId } = req.cookies;
client.del(sessionId, (err, count) => {
if (err) {
console.error(err);
res.send(‘退出失败!’);
} else {
res.clearCookie(‘sessionId’);
res.send(‘退出成功!’);
}
});
});
app.listen(3000, () => {
console.log(‘应用启动了…’);
});
可以看到,服务器端使用Redis来存储注册的用户信息、用户登录状态等,其中sadd方法用于向Redis中添加用户名集合,set用于存储用户信息,keys方法用于查找用户信息,get用于获取用户信息,set用于存储登录状态,expire用于设置过期时间,del用于删除键。
客户端的代码示例如下:
```javascript
const registerForm = document.querySelector('#registerForm');
const loginForm = document.querySelector('#loginForm');
const logoutButton = document.querySelector('#logoutButton');
// 用户注册
registerForm.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(registerForm);
const username = formData.get('username');
const password = formData.get('password');
fetch('/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username, password }),
}).then((response) => {
if (response.ok) {
alert('注册成功!');
} else {
alert('注册失败!');
}
});
});
// 用户登录
loginForm.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(loginForm);
const username = formData.get('username');
const password = formData.get('password');
fetch('/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username, password }),
credentials: 'same-origin',
}).then((response) => {
if (response.ok) {
alert('登录成功!');
} else {
alert('登录失败!');
}
});
});
// 用户退出
logoutButton.addEventListener('click', () => {
fetch('/logout', {
method: 'POST',
credentials: 'same-origin',
}).then((response) => {
if (response.ok) {
alert('退出成功!');
location.href = '/';
} else {
alert('退出失败!');
}
});
});
可以看到,客户端使用fetch方法向服务器端发送请求,其中credentials设置为’same-origin’,表示只有在同一域名下才会发送cookie,可以保证登录状态有效。
总结
本文介绍了如何基于Redis开发一个简单的登录应用,该应用使用Redis存储用户信息和用户状态,保证了用户在不同设备、不同浏览器中的登录状态一致。使用Redis可以提高应用的性能和可扩展性,将数据存储在内存中,可以减少IO操作和磁盘读写,增强应用的响应速度和并发能力。同时Redis具备轻量级、可靠性高、易于部署和使用等优点,非常适合用于缓存、队列等场景。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
网站题目:基于Redis的登录应用实践(redis登录应用)
文章URL:http://www.jxjierui.cn/article/dhjgheo.html


咨询
建站咨询
