使用redis储存session

使用redis 存储 信息 和本地session 做比较

如果相同 表明是同一次登录

如果和redis不同 表明不是同一次登录 强制下线即可

req.headers.session 和 redis中做比较

1.redis存储

store.hset("investorToken",req.session.uid,req.session.investorToken, function (err, reply) {

if (err) {

return res.json(new JSONRet(errCode.unknown("未知错误001")));

}

}

)

investorToken:命名空间

req.session.uid: key

req.session.investorToken:value

store.hget("investorToken",uid,function(err, obj) {

})

2.本地session存储

首先要明白:session是在服务器端创建并保存在服务器端,当代码中创建session时会相应地创建sessionID保存在服务器端,同时服务器向浏览器响应信息时会以cookie形式 (其实就是“JSESSION:sessionID”的键值对)返回并保存到浏览器本地中。一旦当前浏览器的进程要取服务器对应的保存在session的信息时候,就会取出刚才保存在cookie中对应的sessionID和服务器端的sessionID进行对比,相同就能取出你想要的信息,不能就不能取出。

好了,明白这一点后,我们就可以即使浏览器禁止了cookie也能用session。因为在一般情况下(即没禁时候),我们不需把sessionID保存到cookie中,因为一般情况下浏览器会自动的;然而当禁止时候,就需要我们主动的把sessionID写入到cookie中。那么问题就解决了。

使用session

var session = require('express-session');

我们使用 redis 创建session

var RedisStore = require('connect-redis')(session);

app.use(session({

store: new RedisStore({

client:redisClient

}),

secret: '**********',

key:'*********',

resave: false,

saveUninitialized: false,

cookie:{maxAge:60000*30}

}));

1.与其他用户状态保存方案比较

一般开发中用户状态使用session或者cookie,两种方式各种利弊。

Session:在InProc模式下容易丢失,并且引起并发问题。如果使用SQLServer或者SQLServer模式又消耗了性能

Cookie则容易将一些用户信息暴露,加解密同样也消耗了性能。

Redis采用这样的方案解决了几个问题,

1.Redis存取速度快。

2.用户数据不容易丢失。

3.用户多的情况下容易支持集群。

4.能够查看在线用户。

5.能够实现用户一处登录。(通过代码实现,后续介绍)

6.支持持久化。(当然可能没什么用)

///

1.session 和 cookie区别

2.redis 和 session 和 存储服务器

HTTP会话

Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:(Cookie:JSESSIONID=客户端第一次拿到的session ID)。这样,服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象,提供给请求使用

一、cookie:

在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

二、session:

session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

大白话:当你一次访问服务器的时候,服务器会在内存中开辟一块空间,返回唯一一把打开该空间的钥匙,再把这把钥匙返回到浏览器。

当你第二次访问的时候浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间已经销毁又重新返回开辟一块新的空间返回新的钥匙到浏览器。

把session 存放在redis中

const session = require('express-session');

const redisHelper = require('winner-common/redisUtil.js');

const RedisStore = require('connect-redis')(session);

const redisClient = redisHelper.store;

app.use(session({

store: new RedisStore({

client:redisClient

}),

secret: 'lxkWeb',

resave: false,

saveUninitialized: false

}));

为什么把session 存放在redis中

分布式项目通常部署在不同的服务器中,而传统session只存储在本地服务器,并不能实现session的跨域使用。因此实现session一致性通常将sessio存储到redis中,其他服务器获取回话信息直接去redis中获取。spring-session原理就是讲获取session的方式,从tomcate容器获取改为了从redis中获取

java强制下线 session,登录的多地挤下线功能 redis session相关推荐

  1. html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面

    一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...

  2. java中短信验证登录_java实现短信验证码功能

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这几天老大让我弄一个发送短信验证码的功能,使用的是大汉云通讯的短信平台接口,调用短信平台提供的接口(遵循短信平台的接口规范即可).具体看代码: impor ...

  3. Java用Filter制作登录限制-踢下线防踢等

    Hello, 我是Shendi, 这次我给大家带来了 JavaWeb登录 限制登录 防踢  挤下线的功能实现 如题,很简单,我们需要编写一个Filter,就叫LoginFilter  实现javax包 ...

  4. Android 端“被挤下线”功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jianshu.com/p/

    Android 端"被挤下线"功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jiansh ...

  5. Android 端“被挤下线”功能的实现

    作者 | sun_____xin 地址 | http://www.jianshu.com/p/f61b69cad212 声明 | 本文是 sun_____xin 原创,已获授权发布,未经原作者允许请勿 ...

  6. java 账户挤下线提示_运用session来控制用户的异地登录被挤下线情况

    在用QQ的过程中我们如果你的账号在另外一台手机上面登录,这是腾讯后台会提醒你异地登录,可能你的账号被盗了,然后你手机上得QQ就会被退出登录,这个时候你就需要重新登录修改密码,以确保账号的安全.那这种被 ...

  7. java强制下线 session_Session管理之超时设置和强制下线

    关于Session,在Java Web开发中,为我们提供了很多方便,Session是由浏览器和服务器之间维护的.好吧,闲话不多说,下面让我们一步一步来实现它们. (一)首先来说下Session超时时间 ...

  8. java 强制下线_【java】如何强制app端强制下线?

    例如 web 端 删除了 正在app 端登陆的用户,怎样能让app 端用户强制下线,web 端用什么方式可以达到这个效果?javaweb 回答 这个是需要App和后台一起处理的,首先在app端写好to ...

  9. PHP多台服务实现单点登录,如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)...

    如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO) Apache Session复制: 使用Memcached来共享PHP Session: 使用Cohere ...

最新文章

  1. FPGA的设计艺术(11)FPGA的构建过程
  2. android git提交整个项目_使用git管理嵌入式软件版本
  3. 单例(Singleton)模式
  4. Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
  5. 开发RESTful WebService
  6. oracle 常用故障,Oracle常见问题解决方案汇总
  7. 面试常考题目之atoi的实现
  8. 2010-2014总结 ____V_V____ hello-world
  9. JSON文件导入Unity3d中是空的的问题
  10. 冒泡排序之如何根据对象一个属性排序
  11. vue从后台下载.zip压缩包文件
  12. vs2010+silverlight4 error
  13. 30款前端特效源码分享
  14. php在线拍照代码,PHP+Javascript实现在线拍照功能实例
  15. Android将网页转为pDf,UrlToPDF 输入网址直接将网页转存为 PDF 档(Android)
  16. CTE 递归查询全解
  17. 夜曲歌词 拼音_周杰伦夜曲乐谱及歌词
  18. 前端文字点击出现蓝底
  19. ASUS TUF GAMING B660M PLUS WIFI D4 i5-12600K RX6650XT 黑苹果efi引导文件
  20. Java多线程开发——一个简单的数字加减小例子

热门文章

  1. Android刘海屏如何适配?一份详细的Android刘海屏、水滴屏全面屏适配方案
  2. 新建mysql数据库方法_三种方法建立MySQL数据库_创建数据库_新建数据库 - 树懒学堂...
  3. ClickHouse压测
  4. 独立站电商优选的客服工具
  5. 海门区高一历史学科教研活动在我校举行
  6. Python:将输入的数字转换为列表
  7. jdbc driver oracle,Driver class 'oracle.jdbc.driver.OracleDriver' could not be found
  8. i3 1315U 和i3 1215U差距 酷睿i31315U和1215U对比
  9. C++中sort函数从大到小排序
  10. [洛谷原创]有线电视网