smrchy / redis-sessions Goto Github PK
View Code? Open in Web Editor NEWAn advanced session store for NodeJS and Redis
An advanced session store for NodeJS and Redis
Hello,
I'm stuck for two days to solve this.
redis-sessions working fine with default redis configuration.
Then I have my redis "requirepass" active in my /etc/redis/redis.conf
now redis-sessions can't connect to redis server
Here is my example code:
var RedisSessions = require("redis-sessions");
var port = 6379,
host = 'MY-HOST-IP',
mypass = 'MY-PASSWORD';
var rs = new RedisSessions(port, host,{password:mypass});
and I tried so many ways but still can not connect. :(
Can someone guide me how to connect redis-sessions using password?
Thank you
When creating a new session the d
parameter should be allowed. This makes it possible to set data when creating a session.
I want to retrieve all current sessions (that have not expired). I see we have the "soapp" but that has a "dt" parameter that implies a time period of activity? Perhaps I am misunderstanding what "dt" is for but it appears to be to allow you to filter sessions to get only those that have actually done something within a time period. I want all sessions - even those that have been idle for a long time (but have not expired). Is the answer just to put a very big number in "dt" ?
How do you set a password to authenticate when connecting?
var rs = new RedisSessions({
host: redisHost,
port: redisPort
});
Hi!
In quit function, redis.quit is called but if a wipe interval was set at the beginning, a clearInterval should be called also.
Not doing so, can lead to unexpected behaviors. In AWS lambda, for example, a still active interval cause the lambda to fail all the time (timeout). When you resolve a lambda, all interval and remaining connections must be put to an end.
When I call redis-session quit method, I expect all events, connections and intervals to be stopped or removed.
I solve my problem by setting wipe to 0. But it took my a while to find out what caused the timeout.
Have a good day!
Even though my TTL time passed way my session data are not getting cleared and not getting removed from session.
In some case, the 'auth' function provided by the node_redis is needed to connect to the redis server. Please provide an API for doing that, thank you.
I think the code can be the following:
RedisSessions.prototype.auth = function(pass){
this.redis.auth(pass);
}
I tested this code and it's work for me
If I create a redis cluster as described here: http://redis.io/topics/cluster-tutorial how do I then configure redis-sessions to make use of the cluster? I only seem to be able to configure a single instance connection so maybe you are only using one specific client (https://github.com/NodeRedis/node_redis)? Would it be possible to also be able to use ioredis - for example pass a pre-configured client when instantiating a redis-session?
log:
npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No README data
/
> [email protected] install /Users/danillo/dev/sbs/sbs/ums/node_modules/redis-sessions/node_modules/hiredis
> node-gyp rebuild
CC(target) Release/obj.target/hiredis-c/deps/hiredis/sds.o
CC(target) Release/obj.target/hiredis-c/deps/hiredis/read.o
LIBTOOL-STATIC Release/hiredis-c.a
CXX(target) Release/obj.target/hiredis/src/hiredis.o
In file included from ../src/hiredis.cc:3:
In file included from ../src/reader.h:4:
In file included from ../node_modules/nan/nan.h:74:
In file included from ../node_modules/nan/nan_new.h:181:
../node_modules/nan/nan_implementation_12_inl.h:172:66: error: too many arguments to function
call, expected at most 2, have 4
return v8::Signature::New(v8::Isolate::GetCurrent(), receiver, argc, argv);
~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~
/Users/danillo/.node-gyp/4.2.1/include/node/v8.h:4675:3: note: 'New' declared here
static Local<Signature> New(
^
In file included from ../src/hiredis.cc:3:
In file included from ../src/reader.h:4:
../node_modules/nan/nan.h:165:25: error: redefinition of '_NanEnsureLocal'
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:160:25: note: previous definition is here
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Handle<T> val) {
^
../node_modules/nan/nan.h:253:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(NanNew(v8::Undefined(v8::Isolate::GetCurrent())));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Primitive]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:258:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(NanNew(v8::Null(v8::Isolate::GetCurrent())));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Primitive]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:263:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(NanNew(v8::True(v8::Isolate::GetCurrent())));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Boolean]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:268:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(NanNew(v8::False(v8::Isolate::GetCurrent())));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Boolean]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:500:13: error: no member named 'smalloc' in namespace 'node'
, node::smalloc::FreeCallback callback
~~~~~~^
../node_modules/nan/nan.h:511:12: error: no matching function for call to 'New'
return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
^~~~~~~~~~~~~~~~~
/Users/danillo/.node-gyp/4.2.1/include/node/node_buffer.h:31:40: note: candidate function not
viable: no known conversion from 'uint32_t' (aka 'unsigned int') to 'enum encoding' for
3rd argument
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
/Users/danillo/.node-gyp/4.2.1/include/node/node_buffer.h:43:40: note: candidate function not
viable: 2nd argument ('const char *') would lose const qualifier
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
/Users/danillo/.node-gyp/4.2.1/include/node/node_buffer.h:28:40: note: candidate function not
viable: requires 2 arguments, but 3 were provided
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate, size_t length);
^
/Users/danillo/.node-gyp/4.2.1/include/node/node_buffer.h:36:40: note: candidate function not
viable: requires 5 arguments, but 3 were provided
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
In file included from ../src/hiredis.cc:3:
In file included from ../src/reader.h:4:
../node_modules/nan/nan.h:515:12: error: no viable conversion from
'v8::MaybeLocal<v8::Object>' to 'v8::Local<v8::Object>'
return node::Buffer::New(v8::Isolate::GetCurrent(), size);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/danillo/.node-gyp/4.2.1/include/node/v8.h:210:7: note: candidate constructor (the
implicit copy constructor) not viable: no known conversion from
'v8::MaybeLocal<v8::Object>' to 'const v8::Local<v8::Object> &' for 1st argument
class Local {
^
/Users/danillo/.node-gyp/4.2.1/include/node/v8.h:210:7: note: candidate constructor (the
implicit move constructor) not viable: no known conversion from
'v8::MaybeLocal<v8::Object>' to 'v8::Local<v8::Object> &&' for 1st argument
class Local {
^
/Users/danillo/.node-gyp/4.2.1/include/node/v8.h:214:13: note: candidate template ignored:
could not match 'Local' against 'MaybeLocal'
V8_INLINE Local(Local<S> that)
^
/Users/danillo/.node-gyp/4.2.1/include/node/v8.h:326:13: note: candidate template ignored:
could not match 'S *' against 'v8::MaybeLocal<v8::Object>'
V8_INLINE Local(S* that)
^
In file included from ../src/hiredis.cc:3:
In file included from ../src/reader.h:4:
../node_modules/nan/nan.h:522:26: error: no member named 'Use' in namespace 'node::Buffer'
return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
~~~~~~~~~~~~~~^
../node_modules/nan/nan.h:1339:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(NanNew(handle)->Get(kCallbackIndex)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Function]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:1354:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(node::MakeCallback(
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Value]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:1427:12: error: no matching function for call to '_NanEnsureLocal'
return NanEscapeScope(handle->Get(NanNew(key)).As<v8::Object>());
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:239:43: note: expanded from macro 'NanEscapeScope'
# define NanEscapeScope(val) scope.Escape(_NanEnsureLocal(val))
^~~~~~~~~~~~~~~
../node_modules/nan/nan.h:165:25: note: candidate template ignored: substitution failure
[with T = v8::Object]
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
13 errors generated.
make: *** [Release/obj.target/hiredis/src/hiredis.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/Users/danillo/.nvm/versions/node/v4.2.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Darwin 15.0.0
gyp ERR! command "/Users/danillo/.nvm/versions/node/v4.2.1/bin/node" "/Users/danillo/.nvm/versions/node/v4.2.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/danillo/dev/sbs/sbs/ums/node_modules/redis-sessions/node_modules/hiredis
gyp ERR! node -v v4.2.1
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm WARN optional dep failed, continuing [email protected]
Timed out sessions should be removed from the result set
I get some big red errors when I run "npm install redis-sessions" on Windows. One problem is that I might need to install Redis on Windows first, and I didn't do that. I guess I don't understand why I would need to install locally, but that could be the problem...HOWEVER, if I do need to install Redis first, PLEASE indicate that on this GitHub page.
right now I am following these instructions to install Redis on Windows:
https://github.com/rgl/redis/downloads
In any case, as it stands now -
the errors I get in order of appearance are: C1083, C2054, C2085, C2143.
It says that it cannot open include file: 'sys/socket.h'
here is the output from the command line:
ip = req.headers['x-forwarded-for'] or req.connection.remoteAddress or req.socket.remoteAddress or req.connection.socket.remoteAddress
The IP I get is ::ffff:127.0.0.1
This causes an issue with the package saying it's not a valid IP format.
Setting this optional parameter to true
will prevent the session ttl
to be refreshed when getting the session.
I've set ttl for session 1000 seconds, after 1000 seconds session expired. when I make .get request to get session it returned an empty object. It is fine, but session is not deleted from redis server. Is it possible to set to delete sessions after expiration?
Suggestion:
Capture the wipe interval id created during setInterval()
and provide a quit(), shutdown(), stop()
or similarly named method that clears the wipe interval using clearInterval(this.wipeIntervalId);
and gracefully closes the Redis client using this.redis.quit()
.
Add checking for variable type session[4] correspond json.
I tried the library and it worked as expected for storing sessions using a single instance of redis. But unfortunately, it does not support sentinel. Is it possible to add sentinel support to the library ?
Within connect-redis-sessions i create sessions by simply upgrade them with a user_id.
In this case i'll have no additional data to set as d
.
So if i do not supply a d
i'll get an [missingParameter: No d supplied]
Error.
If i set d={}
i'll get an [invalidValue: d must containt at least one key.]
Error.
The sample code under "Create a session" on this page is not the same as github page; The bracket location after 'ttl' on npmjs page is different from github page.
Your library seems to be awesome, but there are no types. It would be great to have it for typescript developers...
In case the redis server cannot be reached, it would be useful to specify a timeout. Sessions being an important part of an application (prerequisite before processing a request), a short response time is crucial to a good user experience.
Being able to set a short timeout (e.g. a few seconds) would ensure an app's reactivity, instead of having to wait an undecided amount of time.
Some quick thoughts about a new possible feature:
In an environment with tens of thousand of simultaneous session requests per second it might be helpful to cache session replies for a short time.
For example an app could load the home screen and then issue 10 ajax requests to a single server. Each of those 10 requests would have to validate the session in Redis. Instead only the first session could be read from Redis. The other 10 would be served from in-memory cache in the Node app.
This has some consequences to the returned session data:
idle
, and r
keys will be the same for all cached replies. They won't be increased in Redis. So for short running sessions this could mean a valid session will be returned even if it has expired already. r
will now reflect the real number of times a session was read from Redis.d
or killing of a session) should result in a cache expiry. This could be achieved with a pub/sub channel for all connected redis-session clients.Those changes would make hundreds of thousands or possibly millions of sessions per second possible and reduce the load on a Redis server considerably.
I was looking at the source code and noticed the use of Math.random to create tokens, I couldn't help but think that this could be a potential security issue, please correct me if I'm wrong.
Also, would you consider accepting a pull request where the token creation is refactored to use uid-safe?
A set
option like d
, e.g called g
or global, which stores shared data accross all sessions of a id
.
Should I do anything before upgrading to any of these two?
Hello,
First, nice work for redis-session, it makes my day ;)
However, how can i do to increase session's TTL ? Or another way to extend user's sessions ?
currently an id cannot be an email. Only alphanumeric characters are allowed.
Change the validator to allow any string up to 128 (increase from 64 characters).
Big fan btw ... great work!
I am trying to kill the session and token looks absolutely identical to the token created when establishing the session. The only difference in output is <64 character token> (without double marks) vs. "<64 charactoer token>" (with double marks) ... typeof for both is "string" so I assume this is not the problem. Here is the output:
Logon:
Type of token: string
Session token created: 57HHvT77x27odh3INVqdP87jOLf0uJkeKlpiMsEvh7eSSM8TAWQaTOgZidcxcajy
Logout:
Type of token: string
"57HHvT77x27odh3INVqdP87jOLf0uJkeKlpiMsEvh7eSSM8TAWQaTOgZidcxcajy"
Error: invalidFormat: Invalid token format
Any idea what this could be please?
Big thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.