手机版

节点和会话原则及实践技能总结

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

一块饼干

因为HTTP协议没有状态,所以在很多情况下需要一些信息。比如用户登录后再次访问网站,无法判断用户是否已经登录。所以有cookies,用来在浏览器端保存用户数据。它具有以下特点

1仅在客户端浏览器端可用

2用于记录信息,最大大小为4k字节

3如果使用cookie,对域名的任何访问都会带来cookie

目前,浏览器缓存在新网站中使用较多,cookies存在一些问题。例如,每次向服务器提交请求时,无论是否访问静态图片,都会带来cookies。

cookie示例:

第二届会议

会话类似于服务器端的cookie,保存在服务器端,类似于服务器缓存。用户在登录时总是需要进行身份验证,因此可以在会话中进行身份验证。会话和cookie是一一对应的。

会话创建顺序

生成全局唯一标识符(session id);

打开数据存储空间。通常,相应的数据结构将在内存中创建,但在这种情况下,一旦系统断电,所有会话数据都将丢失。如果是电商网站,这次事故会造成严重后果。但是,它也可以写入文件,甚至存储在数据库中。虽然这样会增加I/O开销,但会话可以在一定程度上持久化,更有利于会话的共享;

向客户端发送会话的全局唯一标识符。

问题的关键在于服务器如何发送这个会话的唯一标识符。在HTTP协议中,数据只能放在请求行、头字段或正文中。基于此,一般有两种常用的方法:cookie和URL重写。

三件套饼干

Cookie是如何设置的?由服务器返回的请求设置。

服务器会返回set-cookie的消息,通知浏览器要设置cookie,所以浏览器会根据set-cookie中的字段来设置信息,比如上面的信息会设置【emailprotected】。

四实战

让我们以客户端会话(express-session基本相同)为例,为项目配置session

1个安装模块

var session=require(' client-session ');2配置会话

app . use(session({ cookiename : ' session ',secret : ' random _ string _ goes _ here ',duration: 30 * 60 * 1000,activeDuration: 5 * 60 * 1000,});1)secret:随机字符串,因为客户端的数据不安全,需要加密。

2)持续时间:会话的到期时间,到期后必须重置

3)例如Active Duration :的激活时间设置为30分钟,那么只要用户在30分钟内有服务器交互,就会被重新激活。

第五,在会话中保存用户信息

app.post('/login ',函数(req,RES){ user . findone({ email : req . body . email }),函数(err,user) { if(!用户){ res.render('login.jade ',{ error: '无效的电子邮件或密码'});} else { if(req . body . password===user . password){//用用户的info req.session.user=user设置cookie//这里好像有问题,只设置了session,返回了这个sessionid,但是不会在这个cookie res.redirect('/dashboard ')中设置数据;} else { res.render('login.jade ',{ error: '无效的电子邮件或密码'});} } });});六会话层中间件

我们当然不想在每个请求中添加这一段,所以我们使用express进行全局配置

app.use(function(req,res,next){ if(req . session req . session . user){ user . findone({ email : req . session . user . email }),function(err,user){ if(user){ req . user=user;delete req . user . password;//从session req.session.user=user中删除密码;//刷新会话值RES . locals . user=user;} //完成中间件的处理,运行route next();});} else { next();}});如果用户逻辑在未登录时必须登录,那么我们可以继续添加路由

函数required log in(req,res,next) { if(!req . user){ RES . redirect('/log in ');} else { next();}};app.get('/dashboard ',requireLogin,function(req,RES){ RES . render(' dashboard . jade ');});七大安全

1我们可以在注销时重置会话

app . get('/注销',函数(req,RES){ req . session . reset();RES . redirect('/');});您还可以增加一些安全性

HttpOnly:用于确保cookie只能通过http访问,而不能被js读取

安全:强制https

短暂:关闭浏览器时关闭cookie

八个总结

Cookie和session有各自的优缺点和各自的应用场景,因为它们的实现方法不同:

cookie的典型应用场景是memory Me服务,即用户的账户信息以Cookie的形式保存在客户端。当用户再次请求匹配的URL时,账户信息将被传输到服务器,相应的程序将完成自动登录等功能。当然,您也可以保存一些客户端信息,如页面布局和搜索历史。session的典型应用场景是用户登录网站后,将自己的登录信息放入Session中,并在后续的每一个请求中查询对应的登录信息,确保用户合法。当然也有购物车等经典场景;

安全cookies在客户端存储信息。如果不加密,无疑会暴露一些隐私信息,安全性很差。一般来说,敏感信息会被加密并存储在cookies中,但很容易被窃取。会话将只在服务器端存储信息。如果存储在文件或数据库中,可能会被盗,但可能性比cookie小得多。

会话劫持是一种安全威胁,这将在下面详细解释。一般来说,会话比cookie更安全;

性能Cookie存储在客户端,消耗客户端的I/O和内存,而会话存储在服务器,消耗服务器的资源。但会话对服务器造成的压力相对集中,cookies很好地分散了资源消耗。在这方面,cookies优于session

通过设置有效期,时间敏感Cookie可以在客户端长期存在,而会话一般有效期较短(用户主动破坏会话或关闭浏览器后触发超时);

其他Cookie的处理不如开发中的会话方便。而且,cookie在客户端的数量和大小都是有限的,而会话的大小只受硬件的限制,所以可以存储的数据无疑是太大了。

继续补充关于如何完成一个完整的着陆

1个客户端

一般来说,应该使用https,密码永远不要在网络中以明文传输。因此,在传输到服务器时,应该先加密。常见的md5被破解,所以SHA512可以用来加密SHA256(密码)

2台服务器

服务器需要再次加密密码,因为客户端上的一切都不安全。如果你的网络被监控,它会对SHA512(用户名SHA512(密码)sault进行加密,其中sault是一个随机数,防止密码被带出库后被猜到,所以需要附上一个随机数。这个绍特最好存储在另一个数据库中,以防止被猜测出库,因为它存储在一个库中。

摘要

以上是边肖介绍的Nodejs和Session的原理和实用技巧的总结,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:节点和会话原则及实践技能总结是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。