You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+Express会话:如何记录用户上次访问的日期和时间?

Hey there! I get what you're trying to build—tracking a user's last visit time is a classic feature, and it's totally doable with Express, even if the session docs don't spell out this exact use case directly. Let's break this down into two straightforward solutions, depending on your needs:

Solution 1: Use HTTP Cookies (Lightweight, No Extra Session Storage)

This is perfect if you just need to track the last visit time without managing more complex session data.

Step 1: Set Up Dependencies

First, initialize your project and install the required packages:

npm init -y
npm install express cookie-parser

We need cookie-parser because Express doesn't parse cookies by default.

Step 2: Write the Core Logic

Create an app.js file with this code:

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

// Enable cookie parsing
app.use(cookieParser());

app.get('/', (req, res) => {
  // Grab the existing lastVisit cookie from the request
  const lastVisit = req.cookies.lastVisit;

  if (lastVisit) {
    // Return welcome back message with formatted last visit time
    res.send(`Welcome back! Your last visit was on ${new Date(lastVisit).toLocaleString()}`);
  } else {
    // First-time visitor: show welcome message
    res.send('Welcome to our website for the first time!');
  }

  // Update the lastVisit cookie with current time
  res.cookie('lastVisit', new Date().toISOString(), {
    maxAge: 365 * 24 * 60 * 60 * 1000, // Keep cookie for 1 year
    httpOnly: true, // Prevent frontend JS access (security best practice)
    secure: process.env.NODE_ENV === 'production' // Only send over HTTPS in production
  });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

How It Works

  • On each visit, we check if the lastVisit cookie exists. If it does, we display the formatted timestamp.
  • We then update the cookie to the current time, so the next visit will show this timestamp as the "last visit".

Solution 2: Use Express Session (Better for Complex Session Needs)

If your app already uses session management, or you need to store more user-specific data alongside the last visit time, this is the way to go.

Step 1: Install Dependencies

npm init -y
npm install express express-session

Note: The default session storage is in-memory, which is fine for development but not production. For production, use a persistent store like Redis (connect-redis) or MongoDB (connect-mongo).

Step 2: Write the Session-Based Logic

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

// Configure session middleware
app.use(session({
  secret: 'your-strong-secret-key', // Use an environment variable in production!
  resave: false, // Only save session if data changes
  saveUninitialized: false, // Don't save empty sessions
  cookie: {
    maxAge: 365 * 24 * 60 * 60 * 1000 // Session expires after 1 year
  }
}));

app.get('/', (req, res) => {
  // Access lastVisit from the session object
  const lastVisit = req.session.lastVisit;

  if (lastVisit) {
    res.send(`Welcome back! Your last visit was on ${new Date(lastVisit).toLocaleString()}`);
  } else {
    res.send('Welcome to our website for the first time!');
  }

  // Update the session's lastVisit value
  req.session.lastVisit = new Date().toISOString();
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

Key Notes

  • The session middleware handles cookie management automatically, so you don't have to deal with setting cookies manually.
  • For production, replace the in-memory storage with a persistent solution to avoid losing session data when the server restarts.

Extra Tips

  • Time Formatting: Use toLocaleString() for user-friendly localized time, or libraries like date-fns or luxon for more control over formatting.
  • Security: Always use httpOnly and secure flags for cookies in production to prevent XSS attacks and ensure data is transmitted securely.
  • Expiry: Adjust the maxAge value to control how long the last visit data is retained (e.g., 30 days instead of a year).

内容的提问来源于stack exchange,提问作者shinryu333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:19:22