Node.js 2-cookie 和 session

var express = require('express');
var app = express();
/* var cookieParser = require('cookie-parser'); */
var session = require('express-session');
var path = require('path')
app.use('/static', express.static(path.join(__dirname, '../Web-M-XYS')))
//即 前后端同源才能接收到cookie
app.use(session({
    secret: 'hubwiz app', //secret的值建议使用随机字符串
    cookie: {maxAge: 10 * 1000 * 30} // 过期时间(毫秒)
}));
var fs = require('fs')
fs.readFile("./src/data.json")

//  主页输出 "Hello World"
app.get('/', function (req, res) {
    console.log("主页 GET 请求");
    res.send('Hello GET');
})


//  POST 请求
app.post('/', function (req, res) {
    console.log("主页 POST 请求");
    res.send('Hello POST');
})

//  /del_user 页面响应
app.get('/del_user', function (req, res) {
    console.log("/del_user 响应 DELETE 请求");

    //res.send('删除页面');
    if (req.session.sign) {//检查用户是否已经登录
        console.log(req.session);//打印session的值
        res.send('welecome <strong>' + req.session.name + '</strong>, 欢迎你再次登录');
    } else {//否则展示index页面
        req.session.sign = true;
        req.session.name = '汇智网';
        res.end('欢迎登陆!');
    }
})

//  /list_user 页面 GET 请求
app.get('/list_user', function (req, res) {
    console.log("/list_user GET 请求");
    console.log('session id: ', req.session.id);
    res.set({'Content-Type':'application/json','Access-Control-Allow-Origin':'*'})
    res.cookie('haha', 'name1=value1&name2=value2', {
        maxAge: 20 * 1000, path: '/', httpOnly: false
    });
    res.send(data.toString());
})

/* // 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
app.get('/ab*cd', function (req, res) {
    console.log("/ab*cd GET 请求");
    res.send('正则匹配');
}) */


var server = app.listen(8081, function () {

    var host = server.address().address
    var port = server.address().port

    console.log("应用实例,访问地址为 http://%s:%s", host, port)

})


cookie & session

Node.js 2-cookie 和 session

var express = require('express');
var app = express();
/* var cookieParser = require('cookie-parser'); */
var session = require('express-session');
var path = require('path')
app.use('/static', express.static(path.join(__dirname, '../Web-M-XYS')))
//即 前后端同源才能接收到cookie
app.use(session({
    secret: 'hubwiz app', //secret的值建议使用随机字符串
    cookie: {maxAge: 10 * 1000 * 30} // 过期时间(毫秒)
}));

导入session
var session = require(‘express-session’);
相当于我用这个加密,如果别人获得这个密码,就能对session加密解密
secret: ‘hubwiz app’, //secret的值建议使用随机字符串

创建了session,就会给客户端自动分配给sessionId,(一般session里面包括时间戳和sessionId,并且会根据secret自动加密)服务端可以通过
console.log('session id: ', req.session.id);
拿到sessionId的值。

例如:
Node.js 2-cookie 和 session

cookie 一般是服务端自己进行加密
设置cookie:

    res.set({'Content-Type':'application/json','Access-Control-Allow-Origin':'*'})
    res.cookie('haha', 'name1=value1&name2=value2', {
        maxAge: 20 * 1000, path: '/', httpOnly: false
    });

注意 (前端ajax收不到session问题)

方法1.前后台同源

var path = require('path')
app.use('/static', express.static(path.join(__dirname, '../Web-M-XYS')))
//即 前后端同源才能接收到cookie

这里的index.js是Node文件下的index.js 是node.js的入口文件
Node.js 2-cookie 和 session
可参考:https://www.cnblogs.com/slovey/p/9213631.html

方法2.

参考:https://blog.****.net/fortunegrant/article/details/79534831
xhrFields 大概的意思是,默认情况下,标准的跨域请求是不会发送cookie等用户认证凭据的。所以,当你再次访问远程api的时候,cookie是不会被带上的,于是乎,服务器理所当然地认为你还没有登录。MDN上的简单介绍 credentials 。用XMLHttpRequest请求的时候,我们需要设置属性 withCredentials=true ;

$(function () {
    $.ajax({
        type:'get',
        url:'http://localhost:8081/list_user',
        dataType:'json',
        xhrFields: {
            withCredentials: true
        },
        success:function(data){
            console.log("data:",data);
        },
        error:function(err){
            console.error(err)
        }
    })
});