Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do different node.js sessions share variables?

Here is a simple program:

var express = require('express');

var app = express.createServer();

var count = 0;

app.get("/", function(req, res) {
    res.send(count.toString());
    count++;
});

app.listen(3000);

When I open it in two different browsers, the first displays 0 and the second displays 1.

Why? They are different sessions so I expect node.js use different child processes for them. My understanding, with PHP, is that sharing variables should be implemented using databases.

Why can node.js do this without any external storage? Is it a single-process but multiple threads?

How do I declare a variable that belongs to a specific session?

like image 833
Lai Yu-Hsuan Avatar asked Jun 15 '11 13:06

Lai Yu-Hsuan


People also ask

How do I handle multiple sessions in NodeJS?

Here, since sess is global, the session won't work for multiple users as the server will create the same session for all the users. This can be solved by using what is called a session store. We have to store every session in the store so that each one will belong to only a single user.

How do Sessions work in NodeJS?

js uses a cookie to store a session id (with an encryption signature) in the user's browser and then, on subsequent requests, uses the value of that cookie to retrieve session information stored on the server.

Why we use express session in NodeJS?

Session management can be done in node. js by using the express-session module. It helps in saving the data in the key-value form. In this module, the session data is not saved in the cookie itself, just the session ID.

Is NodeJS gaining popularity?

Built by Ryan Dahl on Chrome's V8 JS engine in 2009, this framework is gradually gaining popularity among professionals, especially when more and more companies are beginning to require full-stack web developers.


1 Answers

Node.js is single process.

Your code runs in a single process ontop of an eventloop.

JavaScript is single threaded. Every piece of code you run is single threaded. Node.js is fast and scales because it does not block on IO (IO is the bottle neck).

Basically any javascript you run is single threaded. JavaScript is inherantly single threaded.

When you call parts of the nodeJS API it uses threading internally on the C++ level to make sure it can send you the incoming requests for the HTTP servers or send you back the files for the file access. This enables you to use asynchronous IO

As for sessions

app.use(express.session({ secret: "Some _proper_ secret" }));
...
app.get("/", function(req, res) {
    if (req.session.count == null) {
        req.session.count = 0;
    }
    res.send(req.session.count);
    req.session.count++;
});
like image 199
Raynos Avatar answered Oct 21 '22 14:10

Raynos