node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录
关于session 和cookie 我搞了2-3天, 发现这个玩意也挺麻烦的. 很多教程都是把这种会话保存在nosql里面,比如mongo,或者redis等等.但是我还是想直接保存在计算机的内存中,比较符合传统的方式.网上也有很多这方面的文章,但基本上都是你抄我的,我抄你的,而且express有很多这种session/cookie的中间件,总是让人弄迷糊.很多文章都是点到为止,完全要靠自己慢慢去试,去看文档,去摸索.
我是基于connect这个中间件实现的.这个middleware 功能非常强大
有兴趣的同学可以参考: http://blog.fens.me/nodejs-connect/
安装在这里就不说了. 下面我们就来实现一下,希望对大家有用
导入模块在app.js里
1 var connect = require('connect');
在路由分发语句前加入。
1 app.use(bodyParser.json()); 2 app.use(bodyParser.urlencoded()); 3 app.use(cookieParser()); 4 app.use(connect.session({ secret: 'lgphp', key: 'lgphp' ,cookie: { maxAge: 20000}})); //session 时长为20秒,这个是以毫秒为单位,这样我们就建立一个session的会话,这是一个全局的设置 5 routes(app);
先说session ,设置session 的KV
req.session.sessname = 'i am a sesion';
这样我们就设置了一个名为sessname的session变量,值就是iam a sesion,这个session的会话时长是20秒。ubuntu上打字还是不太灵活
获取session
res.send('session:' + req.session.sessname)
删除session
req.session.destroy();
判断session是否存在
if (req.session){ //判断session是否被销毁
以上session操作足够完成常用的逻辑啦
下面说cookie,我们也经常用到的。
设置cookie
1 res.cookie('cookiename','i am a cookie',{ maxAge: 20000,httpOnly:true, path:'/'});//cooike 时长 30 sec
获取cookies的值
var c = req.cookies.cookiename //这是个字典对象,你可以用括号的方式获得
删除cookie,网上很多,但是好像都没用,有的是把过期时间设置为0,我试了,cookie的值没有了,但是cookie还在,用chrome查看还有的。
res.cookie('cookiename','null',{maxAge:0});
这样删除就没问题了。
判断cookie是否存在,比如做登录和权限验证什么的。cookie失效后,变成了undefined,所以我们这样判断
if ('undefined' === (typeof req.cookies.cookiename)){ res.send('deleted cookie'); }
分类:
源代码分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构