什么是cookieCookie是用户计算机上浏览器存储的一小段文本。cookie的常见用途是身份验证、存储站点首选项、购物车项目和服务器会话标识。每次用户的网络浏览器与网络服务器交互时,它都会将cookie信息传递给网络服务器。只有浏览器存储的与请求的URL中的域相关的cookie才会被发送到服务器。这意味着与www.example.com相关的cookie将不会发送到www.exampledomain.com。从本质上讲,cookie是一种将一个页面链接到下一个页面以供用户与网站或网络应用程序交互的好方法。What是的sessionSession是保存在服务器端的会话。session的典型应用场景是用户登录网站后,将自己的登录信息放入session中,在后续的每次请求中查询对应的登录信息,以确保用户合法。比如购物车等经典场景,为了存储客户端不适合存储的信息,我们使用session。Lasso内置会话处理,并处理cookie本身的设置和检索。它会自动设置和检索会话ID,这是唯一存储在客户端的东西。为什么要使用session谈到session一般都是在web应用的上下文中。我们知道Web应用是建立在HTTP协议之上的,而HTTP协议只是一种无状态的协议。.也就是说,如果用户从A页面跳转到B页面,会重新发送一个HTTP请求,服务器返回响应时无法知道用户在请求B页面之前做了什么。而正是这种网络动态的需求给HTTP协议带来了一个难题:一个无状态的协议如何关联两个连续的请求?换句话说,无状态协议如何满足有状态的要求?这个时候有状态化是必然趋势,协议无状态化也是板上钉钉的事情。因此,我们需要一些解决方案来解决这个矛盾,维护HTTP连接状态,于是cookies和session出现了。session和cookie的关系上面说了cookie和session是为了解决HTTP协议本身的无状态性。两者都可以记录状态,前者在客户端保存状态数据,后者在服务器端保存状态数据。安全cookie在客户端存储信息。如果不加密,无疑会暴露一些隐私信息,安全性差。一般敏感信息都会被加密存储在cookies中,但很容易被窃取。会话将只存储服务器端的信息。如果存储在文件或数据库中,则有可能被窃取,但这种可能性比cookie要小得多。会话安全最突出的就是会话劫持问题,这是一种安全威胁。一般来说,session的安全性高于cookie。express框架的会话内存存储express-session是基于express框架专门用于处理会话的中间件。session认证机制离不开cookie,需要同时使用cookieParser中间件。https://www.npmjs.com/package...varexpress=require('express');varsession=require('express-session');varcookieParser=require('cookie-parser');varapp=express();app.use(cookieParser());app.use(session({secret:'12345',name:'testapp',//这里的名字是cookie的名字,默认的cookie名字是:connect.sidcookie:{maxAge:80000},//设置maxAge为80000ms,即session和对应的cookie会在80s后过期resave:false,saveUninitialized:true,}));app.get('/awesome',function(req,res){if(req.session.lastPage){console.log('最后一页是:'+req.session.lastPage+".");}req.session.lastPage='/awesome';//每次访问,session对象的lastPage会自动在内存中保存或更新session。res.send("You'reAwesome.Andthesessionexpiredtimeis:"+req.session.cookie.maxAge);});app.get('/radical',function(req,res){if(req.session.lastPage){console.log('最后一页是:'+req.session.lastPage+".");}req.session.lastPage='/radical';res.send('多么激进的访问!会话过期时间为:'+req.session.cookie.maxAge);});app.get('/tubular',function(req,res){if(req.session.lastPage){console.log("Lastpagewas:"+req.session.lastPage+".");}req.session.lastPage='/tubular';res.send('Areyouasuffer?sessionexpiredtimeis:'+req...req.session是一个JSON格式的JavaScript对象。我们在使用过程中可以随意添加成员,这些成员会自动保存到option参数指定的地方,默认是在内存中。Koa框架之session内存varsession=require('koa-generic-session');varredisStore=require('koa-redis');varkoa=require('koa');varapp=newkoa();//对于koav1使用`varapp=koa();`app.keys=['keys','keykeys'];app.use(session({store:redisStore()}));cookie:会话cookie设置,默认为{path:'/',httpOnly:true,maxAge:24*60*60*1000//onedayinms,rewrite:true,signed:true}如果你设置cookie.maxAge为null,意思是没有“过期”"参数已设置,因此cookie成为浏览器会话cookie。当用户关闭浏览器时,cookie(和会话)将被删除。注意ttl不同于cookie.maxAge,ttl设置sessionStore的过期时间。所以如果你设置cookie.maxAge=null,和ttl=ms('1d'),session会在一天后过期,但是cookie会在用户关闭浏览器时销毁。大多数情况下,您可以忽略options.ttl,koa-generic-session会将cookie.maxAge解析为tllSessionStore你可以使用任何其他存储来替换默认的MemoryStore,它只需要遵循这个api:get(sid):getsessionobjectbysidset(sid,sess,ttl):setsessionobjectforsid,withattl(inms)destroy(sid):sidapi的销毁会话需要返回一个Promise、Thunk或生成器。并使用这些事件来报告商店的状态。connectdisconnectkoa-rediskoa-redis与koa-generic-session(koa的通用会话中间件)一起使用.Eventsreadyconnectreconnectingerrorendwarningnode_rediscookies和session记录用户状态的机制有关cookie选项的完整列表,请参阅expressjs/cookies
