node中Session持久化与Redis缓存

一、代码

  
  
  1. var express = require('express');
  2. // 首先引入 express-session 这个模块
  3. var session = require('express-session');
  4. var app = express();
  5. app.listen(5000,function(res){
  6. console.log('listening');
  7. });
  8. // 按照上面的解释,设置 session 的可选参数
  9. app.use(session({
  10. secret: 'recommand 128 bytes random string', // 建议使用 128 个字符的随机字符串
  11. cookie: { maxAge: 60 * 1000 },
  12. name: 'session_id'
  13. }));
  14. app.get('/', function (req, res) {
  15. // 检查 session 中的 isVisit 字段
  16. // 如果存在则增加一次,否则为 session 设置 isVisit 字段,并初始化为 1。
  17. if(req.session.isVisit) {
  18. //req.session.isVisit++;
  19. res.send('<p>第 ' + req.session.isVisit + '次来此页面</p>');
  20. } else {
  21. req.session.isVisit = 1;
  22. res.send("欢迎第一次来这里");
  23. console.log(req.session);
  24. }
  25. });

二、此处写下自己的测试结果

    Cookie

概述:
   在HTTP协议中,制定了Cookie机制,用于实现 客户端和服务器之间的状态共享,
   Cookie是解决HTTP无状态性的有效手段,服务器可以设置(set-cookie)或读取cookie中所包含的信息 
实现原理:
       客户端第一次请求:服务器端如果需要记录用户信息(就是用户需要存session 如:$SESSION['username'] = 'test'),        才会在响应信息中返回 Set-cookie 响应头,如果没有存入用户信息,也就是没有session操作时,不会返回Set-cookie响         应头。当然再次访问页面时,会在请求头中,带上cookie,如图二

        
如图一:
 
当第一次访问时,有服务器对session赋值操作,所以响应头会返回set-cookie.,我们再次访问时,继续看图
图二、
 由于服务器没有对session进行操作,所以响应头也就没有设置set-cookie。

session存入Redis中(持久化存储)

connect-reids  是一个 Redis 版的 session 存储器,使用node_redis作为驱动。借助它即可在Express中启用Redis来持久化你的Session.
 npm install connect-redis

参数
  • client 你可以复用现有的redis客户端对象, 由 redis.createClient() 创建
  • host Redis服务器名
  • port Redis服务器端口
  • socket Redis服务器的unix_socket

可选参数

  • ttl Redis session TTL 过期时间 (秒)
  • disableTTL 禁用设置的 TTL
  • db 使用第几个数据库
  • pass Redis数据库的密码
  • prefix 数据表前辍即schema, 默认为 "sess:"
   
   
  1. var express = require('express');
  2. var app = express();
  3. app.listen(5000,function(res){
  4. console.log('listening');
  5. });
  6. var session = require('express-session');
  7. var redis = require('redis');
  8. var redisClient = redis.createClient('6379', '127.0.0.1');
  9. var RedisStore = require('connect-redis')(session);
  10. app.use(session({
  11. secret:'signkey',
  12. store:new RedisStore({client:redisClient}),
  13. resave:false,
  14. saveUninitialized:false,
  15. name:'session_id'
  16. }));
  17. //测试
  18. app.use(function (req,res,next) {
  19. if(!req.session){
  20. return next(new Error('error'));
  21. }
  22. next();
  23. });
  24. app.get('/', function (req, res) {
  25. // 检查 session 中的 isVisit 字段
  26. // 如果存在则增加一次,否则为 session 设置 isVisit 字段,并初始化为 1。
  27. if(req.session.isVisit) {
  28. req.session.isVisit++;
  29. req.session.username = 'test';
  30. res.send('<p>第 ' + req.session.isVisit + '次来此页面</p>');
  31. } else {
  32. req.session.isVisit = 1;
  33. res.send("欢迎第一次来这里");
  34. console.log(req.session);
  35. }
  36. });
这样session就会转移到redis数据库中,  为什么可以保证持久化呢,因为express服务器突然重启时,用户仍然可以使用当前Cookies里的sessioniD、从数据库获取他的会话状态,做到会话不丢失,提高了网站的健壮性
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Redis 作为 .NET 应用程序的会话存储时,可以使用 Redis持久化功能来确保会话数据不会因为服务器重启或意外崩溃而丢失。Redis 提供了两种持久化方式:RDB 和 AOF。 1. RDB 持久化 RDB 持久化是将 Redis 内存的数据定期写入到磁盘上,即在指定的时间间隔内将内存的数据快照写入磁盘的一个 RDB 文件。当 Redis 重启时,可以将该文件加载到内存,以恢复 Redis 数据。 在 .NET 使用 Redis 的 RDB 持久化需要在 Redis 配置文件设置: ``` # 开启 RDB 持久化 save 900 1 save 300 10 save 60 10000 ``` 其,save 命令的三个参数分别表示: - 在 Redis 900 秒之内,如果至少有一个键被修改,则保存快照; - 在 Redis 300 秒之内,如果至少有 10 个键被修改,则保存快照; - 在 Redis 60 秒之内,如果至少有 10000 个键被修改,则保存快照。 2. AOF 持久化 AOF 持久化是将 Redis 执行的每个命令追加到一个磁盘上的文件,当 Redis 重启时,可以按照文件的命令顺序重放所有操作,以恢复 Redis 数据。 在 .NET 使用 Redis 的 AOF 持久化需要在 Redis 配置文件设置: ``` # 开启 AOF 持久化 appendonly yes # 指定 AOF 文件名 appendfilename "appendonly.aof" # 指定 AOF 文件保存路径 dir /path/to/redis/data ``` 其,appendonly 指定开启 AOF 持久化,appendfilename 指定 AOF 文件名,dir 指定 AOF 文件保存路径。 综上所述,在 .NET 使用 Redis 缓存 session 数据,可以通过 RDB 持久化或 AOF 持久化来确保数据的持久化。需要根据实际情况选择适合的持久化方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值