Tag: redis

客户端cookie不能在node.js中使用express存储在redis存储区中

我开发一个应用程序使用Express和Node.js与Redis作为会话存储。 首先我会告诉你我的代码。 var express = require('express'), redis = require('redis'), var app = express(); app.use(express.urlencoded()); app.use(express.json()); app.use(express.cookieParser()); app.use(express.session({ secret: secret, key: 'express.sid', store: new RedisStore({ host: '127.0.0.1', port: 6379 }), cookie: { maxAge: 3600000 } })); app.use(express.methodOverride()); 这对我来说工作正常,但是当我在浏览器中看到我的请求标题时,它显示的cookie值如下。 Cookie:express.sid=s%3AmF_egbthwH9xtg6E3ts9HHLn.l9zuDq1IcApdTUwIP96vpRSTiDLA99iQS2T4HVpV0tE 但是,当我使用redis-cli检查redis时,只是显示了“sess:”键下的一半键,如下所示。 sess:mF_egbthwH9xtg6E3ts9HHLn 我的目的是否有任何问题/错误?

你如何将php会话数据传递给socket.io?

我正在编写一个应用程序,用户可以同时从多个浏览器login,并在页面加载时build立到服务器上的socket.io连接。 我想跟踪所有的客户端套接字ID, socket.id ,在一个redis集合中,其键值看起来像userId:???:socketClientIds为login用户。 我想SADD的套接字客户端ID后,通过AJAX调用PHP脚本的Redis设置。 由于我保持用户名在PHP会话variables$_SESSION['userId'] ,什么是安全/实用的方式,我可以将此用户ID的值传递给socket.io所以我可以将客户端ID添加到集? client.sadd("userId:???:socketClientIds", socket.id) 我不能相信客户端为userId提供准确的值,因为它可能是伪造的。

监听节点中同一应用中的两个端口

我在端口8081上使用socket.io,并在8080上使用redis表示。 我不能在同一个端口上使用这两个端口,否则我会发生冲突。 当下面的代码运行时,php会话logging在控制台中,我得到了socket.io started消息,但没有什么比从socket.iologin到控制台更远。 编辑: 下面的代码被修改,现在我可以loginsocket.io,但我现在看不到cookie数据。 我不确定什么是错的? 编辑 – 添加testing代码 完整的testing代码在这里: https://www.dropbox.com/sh/nbrmkeq7dwurizi/AADBvl4N5ksnCnFZ6MHFkIyva 服务器代码: var express = require('express'), http = require('http'), app = express(), server = http.createServer(app), io = require('socket.io').listen(8081), cookieParser = require('cookie-parser'), session = require('express-session'), RedisStore = require('connect-redis')(session); app.use(cookieParser()); app.use(session({ store: new RedisStore({ prefix: 'session:php:' }), name: 'PHPSESSID', secret: 'node.js rules' })); app.use('/', function(req, res) […]

Node.js Redis的lpush错误

我正在使用node.js和redis制作一个Web应用程序。 我想将每个传入的请求推送到一个redis队列,然后推送到数据库。 但是每次程序到达lpush命令时都会报错。 这是我的index.js代码, var express = require('express'); var app=express(); var http = require('http').Server(app); var io=require('socket.io')(http); var qs=require('querystring'); var redis=require('redis'); var client = redis.createClient(); var count=0; var parseString = require('xml2js').parseString; //var countm=1; //var counte=1; app.get('/adminm', function(req, res){ res.sendfile('adminmovies.html'); }); app.get('/admine', function(req, res){ res.sendfile('adminevents.html'); }); app.post('/', function(req,res){ count=count+1; var body=""; req.on('data',function(data){ body+=data; }); req.on('end',function(){ console.log(body); var […]

使用Redis进行用户查找表

我正在学习Redis,我正在使用一个简单的users表。 我正在通过node_redis与Redis进行node_redis 。 我存储每个新用户,如: client = redis.createClient(); client.incr('user_count', function (err, reply) { var new_user_id = reply; client.lpush('user_ids', new_user_id); client.hset('user:' + new_user_id, 'username', req.param('username'), redis.print); client.quit(); res.redirect('/'); }); 所以在这一点上,我希望我的数据库看起来像这样: user_ids 1 2 和 user:1 username 'Guy One' user:2 username 'Guy Two' 这工作正常。 但是我现在坚持的是生成完整的用户表。 我迭代user_ids ,并为每一个,拉出相应的user哈希条目。 除了看起来非常低效(每个用户密钥的单独查询)之外,这种方法也是有问题的,因为node_redis getter调用是asynchronous执行的。 所以每个getter都必须在成功callback中调用下一个getter,等等。一个非常长的嵌套callbackgetter的链。 这是我最初尝试的: var usernamesList = new Array(); client.lrange('user_ids', 0, […]

redis保存会话和其他数据

如何使用redis来存储会话和其他数据? 我得到错误“myRedis错误 – >错误:Redis连接到127.0.0.1:6379失败 – 连接ECONNREFUSED”。 没有myRedis部分,express / session / redis运行良好。 var express = require('express'); var session = require('express-session'); // pass the express to the connect redis module // allowing it to inherit from session.Store var RedisStore = require('connect-redis')(session); …. // Populates req.session app.use(session({ resave: false, // don't save session if unmodified saveUninitialized: false, // […]

消息监听器上的Redis被触发两次

我正在使用NodeJS和Redis聊天应用程序,为什么我使用Redis订阅,因为我需要通知其他用户,当我用户login时,我的问题开始时,用户login第一次工作正常的消息listener调用了一次,但是当同一个用户刷新页面时,我发现这个publish方法已经被调用了两次。 以下是我使用的代码示例: var redisClient = redis.createClient({ auth_pass: password }); var myServer; myServer = require('http').createServer(app); var socketIo = require('socket.io').listen(myServer); myServer.listen(port); redisClient.subscribe('myChannel'); socketIo.on('connection', function(dbSocket) { var redisClient2 = redis.createClient({ auth_pass: password }); /***Code for handle request***/ } redisClient.on('message', function(channel, message) { //When refresh page , and I call publish method , the system enter message listener twice […]

在具有多个连接的数据库中快速分配游戏pipe理

我想运行一个可以快速分配游戏数据的服务器。 简单的模型是: P1 joins P2 joins Make a game with P1 & P2 P3 joins P4 joins Make a game with P3 & P4 etc.. 但先进的devise是要有配对的逻辑。 例如: P1 (A) joins. P2 (B) joins. P3 (C) joins. P4 (A) joins. Make game with P1 & P4 etc.. 到目前为止,我一直在使用Node + Mongo.js,但是读取和写入数据库似乎很奇怪。 这是通过使用内存结构更好的服务吗? 我应该看看Redis吗? 我在这里寻找效率。 它不一定是为了数十亿的关系,而是应该容忍的说,即世界上的象棋人群正在玩与国际象棋类似的ELO排名相匹配的国际象棋游戏。

Redis订阅超时

我如何设置Redis的计时器function子,所以当客户端连接和消息没有收到发布者在200毫秒sockets发出一个事件? 这就是我现在所拥有的: io.on('connection', function(socket){ const sub = redis.createClient(); sub.subscribe("data"); sub.on("message", function(channel, message) { io.emit("data", JSON.parse(message)); }); sub.on("error", function(err){ console.log("Error" + err); }); socket.on("disconnect", function(){ sub.removeListerner('message', function(){ io.emit("disconnected"); }) }); });

TTL过期时的事件

当TTL到期时,Redis是否发出任何types的事件? 我期望在任何给定的时间点都可以在Redis中为我的应用程序添encryption钥。 我有一个增量计数器,当我正在生成密钥,同样我希望有一个减量计数器,当密钥过期(TTL到期)。 我知道我可以通过执行'KEYS'来达到目的,但是我想知道Redis是否会产生某种事件,我可以在密钥过期时捕获这些事件。 我将使用NodeJS来捕获事件。 谢谢,拉古。