小编给大家分享一下express-session如何设置session,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
用express web开发框架开发网站时,关于session的设置大致可以分为两种情况,一种是只要用户通过浏览器访问网站就会生成session,第二种是只有用户登录的情况下才能生成session。
第一种的案例网站比较多,比方百度、淘宝、360等等,咱们来看一下百度首页:
我首先清除了浏览器的所有cookie,然后访问百度首页,在未登录情况下,浏览器依然存储了cookie。
用express开发网站设置session需要用到一个npm安装包,express-session,用这个包,就可以设置网站的session,在使用express-session时需要设置一个参数来配置session是否需要初始化。这个参数的名字比较长:saveUninitialized
设置如下:
saveUninitialized默认值为true,但是必须显性的设置一下,不然express-session会报一个警告:
当设置为ture时,用户不论是否登录网站,只要访问网站都会生成一个session,只不过这个session是一个空的session,存储结构为:
sessionid作为一个标识由后端设置set-cookie响应头的方式,告诉浏览器用cookie存储此sessionid,看一下百度的响应头:
那这种未登录就需要设置session的配置方式和只有登录情况下设置session的方式有什么不同呢?
前一种方式是为了方便设置验证机制,不知道大家上网有没有碰到过输入验证码的情况,咱们还用百度来举个栗子(终于找到了百度存在的另外一个意义)。
在讲解案例之前,首先咱来思考一下,网站登录为什么需要输入验证码呢?
验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生。 一般注册用户ID的地方以及各大论坛都要要输入验证码。
以上答案已经很详细了,简单来说,就是增加登录难度,防止恶意登录注册。
那验证码的原理是啥呢?这里就需要用到session技术了。分如下几步来说明session技术配合实现验证码机制:
第一步,用户访问网站(未登录),生成空的session,通过cookie记录sessionid
第二步,用户跳转到登录页面:
这个页面会向后端发送一个请求,这个请求可能是ajax发送的也可能是点击登录后渲染页面时一起发送到的,不论哪种方式,此时后端服务器,会根据此时用户的cookie中记录的sessionid找到前面生成的空session,生成一个验证码,存储结构如下:
第三步,用户填写完用户信息,点击提交,表单信息包括 {验证码:“大王”} 会被发送到服务器,服务器首先根据用户请求中用户的cookie中的sessionid,找到设置的验证码,和前端发送的验证码进行比对,若一致,则继续进行账号密码验证登录,若不一致则返回错误,从这里也可以看出,验证码机制可以单独抽离成一个微服务。
第四步,验证码验证通过,验证登录,将用户信息存入session,用户变为登录状态。此时session存储结构为:
关于第二种情况,只有登录情况下设置session,一般用于内部OA系统,不需要验证码机制,不需要这么麻烦。
express-session中的另外一个十分有用的参数是rolling,这个参数又是干什么用的呢?
简单在这里解释一下,解释之前首先咱们思考一个场景,比方说我上午登录的淘宝,中午下班我去吃饭了,中午回来之后刷新网页,登录显示超时,需要重新登录。但是假如我比较敬业中午不吃饭了,一直在刷淘宝,午饭时间已经过了,其他同事纷纷回来了,但是这时我的淘宝并没有退出,一直是登录状态,中间不需要重新登录,这是为什么呢?
总结这个场景发现两种情况:
1、登陆淘宝后,一段时间未刷新网页,会自动退出
2、登陆淘宝后,一直在浏览淘宝信息,一直刷新,跳转网页,就不会退出。
为什么会出现上面两种情况呢?
相信有部分同学已经猜到了,session设置一般有个过期时间,在express-session中是通过maxAge来设置。
时间到期之后,session会被自动删除,需要重新登录,比方说淘宝设置session保存1小时,我从登录开始,一小时后,session会被删除,但是现实是如果我一直在浏览淘宝的页面,一小时后并不会删除,而是一小时之内我不去刷新淘宝页面就会将session删除。
为什么会这样呢?这是因为,session的计时设置是根据:用户最后一次请求开始计算,这就需要用户每次请求都需要修改session的保存时间。
那在express中如何设置呢?将express-session的rolling的值设置为ture即可,这个值默认为false,需要手动开启,设置如图:
以上是“express-session如何设置session”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。