标签:
随着node的热度增加,不得不让我再一下去回去学习学习node.js(去年的时候稍微看了看).今天说两个重要的东西。cookie和session;
好的,我们先说cookie;cookie是什么?好吧,百度了一下。好像很复杂。说说我的理解。cookie说直白一点就是一个保存在自己客户端的身份证。你进入一个网站的网站的时候,他(服务器)会问你要,你也会主动给他。我们可以很容易查看到cookie。
好了,这是就一大推cookies.我们不但能看,还能随便改。接下来我们说说有什么用。我们经常会看到网站登录的时候有一个下次自动登录是吧?那么为什么下次我们去了他就可以直接登录呢?没错,就是cookies。当服务器给我们的电脑设定了一个cookies之后我们就可以把令牌给服务器。然后就把我们放进去了。或许有些有些同学会想到。既然可以改的话是不是就可以伪装一个。是滴。没错,这就是我们常说的。cookies伪装。反正cookies的安全性问题还很大。废话就不多说了我们先研究怎么设置cookies。(一般来说session和cookie是有一定的连接关系的。我们现在只是学习,单纯的试试,就不写sessionle。我的express是4.x---x几搞忘了。这个影响不大)
先把cookie清空。
router.get(‘/‘, function(req, res, next) {
//加上这句话 res.cookie(‘name‘, ‘daixiaoxing‘, {httpOnly: true}) res.redirect(‘/user‘) });
我们现在在看
好的。我们的cookie已经出现。那么我们下次怎么判断一个用户有没有cookie,好的,只用这个
console.log(req.cookies.name)
我们可以获取到,是吧,那么判断他存不存在就行了呗。这里我要解释一下。cookie的几个值。Domian是域。如果域不同则无效。path是路径,http打了个沟是客户端可以访问。好了。我们已经知道cookie怎么搞了,但是很显然这样还是不行。我们只能判断他登没登过不能判断他的信息是什么样的。那么session出马了。
说说session是什么。session是储存在服务端的。同样也属于http的一部分。session有效保存时间20分钟。这里要提及一个概念叫sessionID.先说说过程。当你访问服务器的时候(假定开发人员设置了session的).会生成一个sessionid这个东西就会变成set-cookie在响应头里面,其实这个东西就是本地浏览器的一个sessionid。然后服务器端还会有一个叫sessionid的东西。这个id都会指向session。所以就有个问题。关闭浏览器id将会消失。但是session这个超级大boss还会存在。直到时间过去。废话就不说了。我们来看看效果
路由:
router.get(‘/‘, function(req, res, next) { console.log(req.session.user) if(!req.session.user){ res.render(‘index‘) } else{ res.redirect(‘/user‘) } }); router.post(‘/‘,function(req,res){ var user = { name:req.body.nicai, pass:req.body.pass } req.session.user = user; res.redirect(‘/user‘) }) router.get(‘/user‘,function(req, res){ console.log(req.session.user) res.send(req.session.user.name) })
app.use(session({ // 夹在cookie中发回的sessionid名 name: ‘SESSION_ID‘, // 用它来对session cookie签名,防止篡改,自己随便填写的字符串 secret: ‘aaaa‘, // 强制保存session即使它并没有变化 resave: true, // 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于未初始化状态。 // 在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。 saveUninitialized: true, // 设置cookie属性,。当你的连接为https时则需将secure设为true cookie: { path: ‘/‘, httpOnly: true, secure: false }, }));
这样就可以读取session。当然我这个是存在内存中,这样不好,很消耗内存。可以存数据库。
再说一个问题。我们可以看到session和cookie其实是和在一起的,用sessionid连接,那么就存在一个问题。如果说cookie别禁用的话,我们就的session就是失败了。解决办法是URL重写,当然这个也是提高性能的一种办法(当然,我不会。嘿嘿。以后再研究)
好了,今天就这样。其他的express还算不复杂。有空再说吧。
标签:
原文地址:http://www.cnblogs.com/fctdream/p/4387295.html