PHP nodejs session,nodejs如何使用session

本来想详细讲解一下的,想想还是算了,简单列一下登录认证过程中,就应该能理解了

客户端: 我要查看用户资料

服务端: 你没有凭证(cookie),请先获得凭证再来,获得凭证需要你提供用户名密码。

客户端: 好的,这是我的用户名和密码

服务端: 验证通过,现在为你生成凭证,请保管好,以后只认凭证,就算阿猫阿狗拿着你的凭证来查资料,我也会给他。

。。。

客户端:我要查用户资料,这是我的凭证.

服务端:好的,请稍等,我确认一下你的凭证是否真的,OK,是真的,资料拿去。

。。。

客户端:我要查用户资料,这是我的凭证.

服务端:对不起,你的凭证已经过期失效了,请重新提供用户名密码获得新的凭证。

OK,再来讲一下怎么生成凭证和怎么验证凭证:

生成的条件是验证用户提供的用户名和密码是对的,

a. 生成随机唯一的session_id, 比如md5(用户id+毫秒数)

b. 生成session内容,并建立session_id与session内容的对应关系

即服务端拿一本帐本,记录下这个凭证(根椐标识)对应的用户名(一般是用户ID)是谁,类似:

abcd123 => 'Tim',

ee22343 => 'You'

(这个对应关系,可以保存在文件、memcache、数据库等等,这就是用不同介质保存session的原理)

c. 将session_id加密、签名,写到凭证中,返回客户端。

用通俗语言来描述这个过程就是:

验证用户名密码正确后

服务端拿出一张纸,随机写上一个标识(比如像医生写病历,有一定的防伪性) ---- session_id

再拿出帐本,写上这个“标识”与“用户”的关联,表示这个标识就等同于用户A ----session_id与session内容关联

给这张纸盖上大印 ----session_id加密和防伪

将这张纸作为凭证,交给用户 ---- 将加密后的session_id作为cookie返回。

最后,用户下次来请求,带上了凭证,服务端验证过程:

有凭证

看看大印是否自己的(验证有效性)

读取凭证中的标识(嗯,一般只有医生能读懂自己写的东西)

拿出帐本,查找标识对应的用户,有找到,验证成功,返回相关内容

其它:

凭证有效期:比如可以约定,一天后就没有用了

帐本有效期:session也是可以有效期的,比如我每隔一小时就删除一些没有用到的session,清理之后,就算你的凭证是真实的,但也无效了。

最后,cookie是标准实现,无所谓自己实现(你可能只是需要封装操作指令),要自己实现session的话,无非就是解决这几个问题:

1)决定你的帐本(用什么方式保存)

2) 实现写帐本(根据session_id写数据)

3) 实现读帐本(按session_id读数据)

4) 实现清理帐本过期数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
首先,需要安装mysql、nodejs和express框架。 然后,创建一个数据库,并在其中创建一个用户表,包括用户ID、用户名和密码等字段。 接下来,在nodejs使用express框架创建一个API接口,用于获取用户信息。在接口中,首先要验证用户的登录状态,即判断用户是否已经通过登录验证,并且是否存储了session信息。 如果用户已经登录并且有session信息,则可以通过session中存储的用户ID来查询用户信息,并将查询结果返回给前端。 以下是一个简单的示例代码: ```javascript const express = require('express'); const session = require('express-session'); const bodyParser = require('body-parser'); const mysql = require('mysql'); const app = express(); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'mydb' }); connection.connect(); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(session({ secret: 'mysecret', resave: false, saveUninitialized: true })); app.post('/login', function(req, res) { const username = req.body.username; const password = req.body.password; connection.query('SELECT * FROM users WHERE username=? AND password=?', [username, password], function(error, results, fields) { if (error) throw error; if (results.length > 0) { req.session.userId = results[0].id; res.send('Login successful'); } else { res.send('Invalid username or password'); } }); }); app.get('/user', function(req, res) { if (req.session.userId) { const userId = req.session.userId; connection.query('SELECT * FROM users WHERE id=?', [userId], function(error, results, fields) { if (error) throw error; if (results.length > 0) { res.send(results[0]); } else { res.send('User not found'); } }); } else { res.send('Please log in'); } }); app.listen(3000, function() { console.log('Server started on port 3000'); }); ``` 在上面的代码中,我们首先创建了一个mysql连接,并使用express框架创建了一个API接口,包括登录接口和获取用户信息接口。 在登录接口中,我们通过查询用户表来验证用户的登录信息,并将用户ID存储在session中。 在获取用户信息接口中,我们首先判断用户是否已经通过登录验证,并且是否存储了session信息。如果是,则通过session中存储的用户ID来查询用户信息,并将查询结果返回给前端。 需要注意的是,在实际开发中,我们需要对接口进行更加详细的参数验证和安全防护,以确保接口的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值