点击上方蓝字关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!
浏览器webservice的session一般是靠cookie来实现的。也就是说服务器给客户端浏览器发一段cookie。之后这个cookie就存储在浏览器端,等后来访问时,就将其一并发送到服务器端,服务器端在根据这个cookie中的值来判断这个连接用户是谁。服务器根据这个传过来的cookie建立一个session。总之,若浏览器传了cookies,就是对应的session,没有传cookie,就是新的session。
这篇说两个问题,一是session如何使用。二是session与form结合实现判断用户是否登录过与是否允许登录的完整功能。
一、session如何使用:
先通过一个简单例子来简略看一下session的使用。
使用session必须先安装好这个中间件(express-session),然后在 require进来,像下面这样初始化这个中间件:
app.use(session({secret:’www’}))
1、通过session暂存id值
重启服务后,访问:
:1234/list/666
这样这个666就存储在session中了。
2、显示暂存值
访问:
:1234/
浏览器就会输出
user id is 666
使用就是这么简单。下面我们通过与form表单结合实现一个用户登录判断的完整功能。
二、session+form实现用户登录:(主要判断:是否允许登录,是否登录过)
下面这个例子实现的是:访问目标页面,服务通过判断这个用户是否登录过,如果登录过就直接进入页面用session保持登录状态,如果没有登录过,就跳到登录页面,用户通过表单输入用户名和密码登录,登录成功后跳到目标页面。
1、安装中间件
首先我们需要安装三个中间件:
express-handlebars:用来模板用户登录界面。
express-session:用来保存用户信息。
body-parser:用来获取用户登录信息。
2、实现用户登录信息获取与暂存储:(是否允许登录)
实现一个form表单的post请求
由上面图可知,有一个用户名称数组useArr,这个数组可以理解为数据库里存放的用户信息。用户登录提交后,首先通过这个数组判断这个用户能否允许登录,如果允许(这个数组里有它的用户名),则把这个用户名给session暂存起来,下次就不需要在重新登录了。
3、判断是否登录过
访问目标页面时用session保持登录状态,首先通过 session值来判断这个用户是否登录过,如果登录过,则直接进入页面,如果没有登录过,就跳到模板handlebars实现的登录页面。(这个地方需要明白的是,如没有做特殊时间设置时,只有当服务器重启时session值才会被清除)。来看一下代码:
4、中间件使用的代码是这样的
上面给出的是主要代码,关于中间件使用的代码,除了模板的使用我们之前贴过,body-parser和express-session我这里贴一下,首先需要引入,这是中间件使用的惯例。
有用户名称数组useArr是这样的:
启动服务:
node form.js
访问:
:1234/
三、结尾总结:
一、 关于以上讲session使用的例子中,不用去使用request.session.id来存储数据,这样会出现乱码,因为id是session内部的一个属性。
二、参数666,无论我访问多少次都是666,唯独我从新启动服务后,这个session就清除了。
今天写完了,下次我们还是通过一个完整的实例,来用自定义中间件方式实现用户登录状态保存的功能。期待吧~~~~~
需要完整实例代码的可以找我要,或有什么讲的不正确的对方,欢迎留言。
本文到此结束,希望对大家有所帮助!