热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

一起看看nodejs中的cookie和session

本篇文章给大家介绍一下nodejs中的cookie和session。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
本篇文章给大家介绍一下nodejs中的COOKIE和session。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

本模块应用一个Session数组来存储系统所有的Session, 当有Session id存在时,无需新建Sessionid,而是直接读取返回Session数据;而当Sessionid不存在时,需要创建Session id,并且将Sessionid存储在该客户端的COOKIE中。笔者做了一个简单的session校验start,代码如下:

var start = function(req,res){
	var cOnn= { res: res, req: req };
	var COOKIEs = {};
	
	if(typeof conn.req.headers.COOKIE !== "undefined"){
		//session存在时,对session进行解析,获取其中的session id
		conn.req.headers.COOKIE.split(';').forEach(function(COOKIE){
			var parts=COOKIE.split('=');
			COOKIEs[ parts[0].trim() ] = (parts[1] || '').trim();
		});
	}else{
		COOKIEs.SESSID = 0;
	}
	
	var SESSID = COOKIEs.SESSID;
	if(typeof sessions[SESSID] !== "undefined"){   //判断服务器中是否存在该session值
		session=sessions[SESSID];
		if(session.expires 

以上就是一个session简单的校验过程,主要思路就是通过req对象中的headers获取COOKIE,并对COOKIE进行解析获取session id,进而判断是否存在该id值,从而返回或生成新的session。下面我们来看下主要方法newSession的实现:

function newSession(res){
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	var SESSID = '';
	for(var i = 0; i <40; i++){
		var rnum = Math.floor(Math.random()*chars.length);
		SESSID += chars.substring(rnum,rnum+1);
	}
	if(typeof sessions[SESSID] !== "undefined"){
		return newSession(res);   //避免重复session
	}
	
	var dt = new Date();
	dt.setMinutes(dt.getMinutes() + 30);
	
	var session = {
		SESSID,
		expires: dt
	};
	sessions[SESSID] = session;
	//为客户端新增COOKIE数据(在客户端COOKIE中保存sessid)
	res.setHeader(&#39;Set-COOKIE&#39;,&#39;SESSID=&#39; + SESSID);
	return session;
}

当然,最后就是将整个模块暴露出去:

exports.start=start;

Session模块的应用

我们可以在入口文件(例如app.js)中require该模块,并在HTTP的createServer函数中调用session.start,并将session.start返回的对象作为一个全局对象存储,代码如下:

var app=http.createServer(function(req,res){
	global.sessiOnLib= session.start(res,req);
});
//调用时
if(!sessionLib[&#39;username&#39;]){
	sessionLib[&#39;username&#39;] = &#39;mxc&#39;;
}

node框架express中session插件的应用

介绍完基础模块,拿笔者的一个项目来说下框架中相关插件的基本用法 —— 其实其实现原理与本文所说不差一二。

const COOKIESession=require(&#39;COOKIE-session&#39;);
(function (){
  var keys=[];
  for(var i=0;i<100000;i++){
    keys[i]=&#39;a_&#39;+Math.random();
  }
  server.use(COOKIESession({
    name: &#39;sess_id&#39;,
    keys: keys,
    maxAge: 20*60*1000  //20min
  }));
})();

使用时判断:

  //检查登录状态
  router.use((req, res, next)=>{
    if(!req.session[&#39;admin_id&#39;] && req.url!=&#39;/login&#39;){ //没有登录且当前不是登录页(避免redirect黑洞)
      res.redirect(&#39;/admin/login&#39;);
    }else{
      next();
    }
  });

登录后:

req.session[&#39;admin_id&#39;]=data[0].ID;

更多编程相关知识,请访问:编程视频!!

以上就是一起看看nodejs中的COOKIE和session的详细内容,更多请关注其它相关文章!


推荐阅读
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
  • 本文详细介绍了《问道》手游在2020年12月31日进行的服务器维护情况,以及此次更新中新增的跨年狂欢活动和寒假活动等内容。同时,文章还涵盖了其他重要的系统优化与修复信息。 ... [详细]
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • 通过与阿里云的合作,牛客网成功解决了跨国视频面试中的网络卡顿问题,为求职者和面试官提供了更加流畅的沟通体验。 ... [详细]
  • 台式电脑的电力消耗:待机一天耗电多少?
    探讨台式电脑的电力消耗问题,特别是待机状态下的能耗。本文将详细介绍影响电脑功耗的因素,并提供计算和优化电源配置的方法。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文介绍如何使用PyCharm专业版通过SFTP上传项目文件至云服务器。首先,确保你使用的是PyCharm专业版,因为社区版不支持此功能。接下来,我们将在云服务器上创建一个专门的目录用于存放项目文件,并详细介绍每一步配置过程。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
author-avatar
爱他让我心痛_830
这个家伙很懒,什么也没留下!
RankList | 热门文章