1、首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中

app.use(express.session({

cookie: {

maxAge: config.get("secret.maxAge") //这里就是设置了session的过期时间,配置文件中是120000,即20分钟。

},

secret: config.get("secret.sessionSecret"),

store: new RedisStore({

host: config.get("session_server").ip,

port: config.get("session_server").port,

prefix: config.get("session_server").prefix

//,db:'mydb' //此属性可选。redis可以进行分库操作。若无此参数,则不进行分库

})

}));

}

2、在现在做的系统中,登陆请求成功之后,服务器存储了一个session,代码

req.session.username = user.userName;//存储的是一个用户名

3、用户登陆之后的操作在路由的拦截器里面校验session,校验成功之后为此session增加20分钟的过期时间。

exports.checkTBLogin = function(req, cb) {

if(req.session && req.session.loginTB){

console.log("req.session.---------------"+req.session.loginTB);

console.log(' req.session.cookie.expires============'+ req.session.cookie.expires);

req.session.cookie.expires= new Date(Date.now() + 20 * 60 * 1000);

return cb(null);

}else{

return cb(null, "login");

}

return cb(null, "login");

};

4、用户点击退出的额时候,销毁session

req.session.destroy();

5、考虑到网站安全的问题,用户做任何操作的时候都要验证session。session的生命周期决定这种方式也不是绝对安全的,

假如用户已经登录了,攻击者截取到了用户发送到服务器的请求,用请求里的sessionid,去做其他操作,只要被截取的用户在线,服务器上这个session没有过期,那操作都能成功。

6、session的生命周期

当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息。

Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的 *浏览器* 中。

用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid找到相应的HttpSession对象,从而获取用户的状态信息。

我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送

任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的

客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一

个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使用的,最正常的办法

就是不去管它,让它等到默认的时间后,自动销毁。

那么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?

其实之前的Session一直都在服务器端,而当我们关闭浏览器时,此时的Cookie是存在

于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。

其实Cookie有两种:

一种是存在于浏览器的进程中;

一种是存在于硬盘上

而session的Cookie是存在于浏览器的进程中,那么这种Cookie我们称为会话Cookie,

当我们重新打开浏览器窗口时,之前的Cookie中存放的Sessionid已经不存在了,此时

服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存

有Sessionid的Cookie到客户端的浏览器中,此时对应的是一个新的会话,而服务器上

原先的session等到它的默认时间到之后,便会自动销毁。

当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;

当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;

当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;

当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,就是本文所阐述的,是不同的session,但是它和session的生命周期是没有关系的.

【学习笔记】Spring中的BeanFactory和ApplicationContext 以及 Bean的生命周期(Y2-3-2)

BeanFactory和ApplicationContext Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类. Spring提供了两种不同的容器: 一种是最基本的Bean ...

Unity3d中MonoBehavior默认函数的执行顺序和生命周期

Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次:如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数 ...

java之hibernate之session中对象的生命周期

1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...

vue生命周期图示中英文版Vue实例生命周期钩子

vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...

12、生命周期-@Bean指定初始化和销毁方法

12.生命周期-@Bean指定初始化和销毁方法 Bean的生命周期:创建->初始化->销毁 容器管理bean的生命周期 我们可以自定义初始方法和销毁方法,容器在bean进行到当期那生命周期 ...

Flutter--Flutter中Widget、App的生命周期

前言 在App的开发过程中,我们通常都需要了解App以及各个页面的生命周期,方便我们在App进入前台时启动一些任务,在进入后台后暂停一些任务.同时,各个页面的生命周期也很重要,每个页面消失时要做一些内 ...

ionic中关于ionicView 的生命周期

当我们来回切换页面时候,视图被缓存下来,不用每次再去new一个新的视图,可以大大地提高性能.当跳出一个视图后,视图的元素被保存在DOM中,它的作用域也就不在$watch的作用域内,当我们访问一个已经被 ...

Java对象在JVM中的生命周期

当你通过new语句创建一个java对象时,JVM就会为这个对象分配一块内存空间,只要这个对象被引用变量引用了,那么这个对象就会一直驻留在内存中,否则,它就会结束生命周期,JVM会在合适的时 ...

Netty中ChannelHandler的生命周期

在使用Netty进行网络编程的时候,通常需要在网络连接的不同阶段进行相应的操作,比如在连接建立时,客户端向服务端发起认证,在接收到数据时对数据内容进行解析等等.那么,连接的不同阶段在netty中如何表 ...

随机推荐

FZU 2090 旅行社的烦恼 floyd 求无向图最小环

题目链接:旅行社的烦恼 题意是求无向图的最小环,如果有的话,输出个数,并且输出权值. 刚刚补了一发floyd 动态规划原理,用了滑动数组的思想.所以,这个题就是floyd思想的变形.在k从1到n的过程 ...

Android ScrollView 不能滚动但是有滚动条

如果一切都检查完毕,没有任何设置为不能滚动,而且outouch事件也没有被拦截的话,那么在布局文件中检查下是否在ScrollView中的子View中设置了margin_top属性.如果设置了,那么Sc ...

maven中pom.xml

1. GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构. ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称.一般 ...

C#注册表

C#注册表情缘   记得当时刚接触C#的时候,喜欢编写各种小软件,而注册表系列和网络系列被当时的我认为大牛的必备技能.直到我研究注册表前一天我都感觉他是那么的高深. 今天正好有空,于是就研究了下注册表 ...

数细胞-swust oj

数细胞(0964) 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完 ...

Spring 源码学习(4)—— bean的加载part 1

前面随笔中,结束了对配置文件的解析工作,以及将配置文件转换成对应的BeanDefinition存储在容器中.接下来就该进行bean的加载了. public Object getBean(String ...

SharpGL学习笔记(十) 常见的光源类型,创建光源

在OpenGL中,使用光源的特性组合,如颜色,位置,方向等等,可以创建多种不同类型的灯光. 常见的几种灯光类型有: 定向光源(directonal) 定位光源(positional) 衰减光源 聚光灯 ...

ssh 上传文件以及文件夹到linux服务器

闲来无事分享一篇,帮助到你的话,麻烦给老弟点个关注.经常会分享一些实用技能. 回归正题,现在服务器linux很多.是不是不会传文件?别急 下面就是方法: 一.上传文件到linux服务器 首先从你本地切 ...

在windows上搭建redis集群(redis-cluster)(转载)

一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis  redis下载地址 ...

服务器session文件什么时候销毁,node中session存储与销毁,及session的生命周期相关推荐

  1. android存储视频文件夹在哪,Android 中 视频存储路径的一个方案

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在进行视频的下载时,我们经常会面临存储路径的选择,选择一个好的存储路径能对Android系统中的内存起到优化的作用.主流app下载路径分析和常见的 ...

  2. C语言初阶-C语言中的数据类型以及变量的作用域和生命周期,常量的类型

    看之前记得先点赞收藏呦!谢谢大家的支持! 目录 一.c语言中的数据类型 注意:这里的long型的定义是>=int所占字节数,所以占4个是没有问题的 二.变量和常量 1.变量的类型 2.变量的作用 ...

  3. 软件开发生命周期中的设计阶段_测试基础——软件开发生命周期

    今天和大家分享的是软件开发生命周期,主要介绍软件的生命周期和软件的设计模型. 国标(GB8566-88)中将软件生命周期分为8个阶段:可行性研究与计划.需求分析.概要设计.详细设计.实现(包括单元测试 ...

  4. 文件传输服务器异常,文件在上传过程中发生异常 文件在上传过程前,安全组...

    文件在上传过程前,安全组件计算散列值失败是什么意思 需要把文件上传页面的网址添加到可信站点,具体操作步骤如下: 天黑路会滑,社会太复杂,还有什么东西比人心更可怕, 首先打开系统的internet选项卡 ...

  5. Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇)

    文章目录

  6. 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法

    在使用  sessiodestroy() 销毁session文件的时候,必须要先使用sessionstart()   来开启session 后才能删除session文件

  7. 服务器启动文件,[Zookeeper] 服务端之单机版服务器启动

    1 服务器端整体概览图 概览图 ServerCnxnFactory:负责与client之间的网络交互,支持NIO(默认)以及Netty SessionTrackerImpl:会话管理器 Datadir ...

  8. php中Session的生成机制、回收机制和存储机制探究

    转载:http://www.jb51.net/article/53938.htm 这篇文章主要介绍了php中Session的生成机制.回收机制和存储机制探究,可以帮助大家对Session有一个全面的了 ...

  9. php session_id 生成规则,php中Session的生成机制、回收机制和存储机制探究

    1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问 ...

  10. java怎么获取服务器文件夹,java获取远程服务器的文件夹

    java获取远程服务器的文件夹 内容精选 换一换 工具中所有涉及上传文件功能的,如果需要上传的文件大于1GB或者解压后超过剩余磁盘空间的一半,则需要释放磁盘空间或手动将文件上传至服务器,其他情况可通过 ...

最新文章

  1. 技术 | Bengio终结Theano不是偶然,其性能早在Keras支持的四大框架中垫底
  2. 长二F发射神十二飞船圆满成功!三名航天员飞向空间站天和核心舱
  3. Centos7 nginx 虚拟主机、反向代理服务器及负载均衡,多台主机分离php-fpm实验
  4. 最短JS判断是否为IE6(IE的写法)
  5. 一张图搞清楚Java异常机制
  6. 三分钟教你用 Scarlet 写一个 WebSocket App
  7. Idea更改console控制台 日志颜色(非插件)
  8. 落魄前端,整理给自己的前端知识体系复习大纲(下篇)
  9. HTML5本地存储——IndexedDB
  10. python写csv文件按升序排列_用python给csv里的数据排序的具体代码
  11. java之list均分
  12. mysql导入.sql文件中文乱码_mysql通过sql文件导入数据时出现乱码的解决办法
  13. 如何搭建WordPress个人博客网站?
  14. strongswan源代码结构与数据结构
  15. 浏览器被劫持怎么办,详细讲解浏览器DNS被劫持的解决方法
  16. Word从指定页开始插入页码
  17. 基于FME实现dwg等高线、高程点、计曲线注记的高程值批量修改研究,等高线批量修改高程,高程点批量修改高程,计曲线注记批量修改高程
  18. 《炬丰科技-半导体工艺》 自对准栅氧化镓金属氧化物半导体晶体管
  19. chipseq MACS2 call peaks 报错解决方法——创建虚拟环境
  20. android emulator ps4,PS4 Simulator模拟器

热门文章

  1. PHP对象注入 PHP Object Injection
  2. 微信小程序教程、微信小程序开发资源下载汇总(6.16日更新,持续更新中……)...
  3. GOF-23种设计模式UML图
  4. 微信团购小程序怎么做?一般要多少钱?
  5. win7字体安装_超强大PDF编辑软件 | Adobe Acrobat DC安装教程
  6. 数据可视化:Metabase
  7. 基于cocos creator 3.4 实现虚拟摇杆
  8. matlab 误差修正模型,求问大神用R做VEC(误差修正)模型的程序包或者代码是什么啊?...
  9. HDFView安装及使用教程
  10. Object-C 语法基础