后端开发 之 配置Cookie

完整示例代码参考SetCookie

目录

Server

cnpm i -g express-generator pm2

express SetCookieServer
# cd SetCookieServer
cnpm i

cnpm i --save express-cors
vim app.js
// 省略了未修改的代码
var app = express();

var cors = require('express-cors');  
app.use(cors({
  allowedOrigins: [
    'http://localhost:8000'
  ],
}));
// 省略了未修改的代码

关于CORS更多介绍参考MDN - HTTP访问控制(CORS)

vim routes/index.js
var express = require('express');
var router = express.Router();

router.post('/login', function(req, res, next) {
  res.cookie('ZHCMD_SESS', 'cookie-from-node', { domain: 'localhost', expires: new Date(Date.now() + 1000000000), httpOnly: true })
  res.send({ msg: 'success' });
});

router.get('/list', function(req, res, next) {
  res.send({ msg: JSON.stringify(req.cookies) });
});

module.exports = router;
pm2 start bin/www

Web

cnpm i -g dva-cli

dva new SetCookieWeb
# SetCookieWeb
vim src/routes/IndexPage.js
import React from 'react';

export default class IndexPage extends React.Component {
  login(options) {
    fetch('http://localhost:3000/login', options)
      .then((res) => {
        return res.json();
      })
      .then((data) => {
          alert(JSON.stringify(data));
      })
      .catch((err) => {
          throw err;
      });
  }

  render() {
    return (
      <div>
        <div
          onClick={() => {
            this.login( {
              method: 'POST',
            });
          }}
        >无credentials</div>
        <div
          onClick={() => {
            this.login( {
              method: 'POST',
              credentials: 'include',
            });
          }}
        >有credentials</div>
      </div>
    );
  }
};
vim src/routes/ListPage.js
import React from 'react';

export default class ListPage extends React.Component {
  list(options) {
    fetch('http://localhost:3000/list', options)
      .then((res) => {
        return res.json();
      })
      .then((data) => {
          alert(JSON.stringify(data));
      })
      .catch((err) => {
          throw err;
      });
  }

  render() {
    return (
      <div>
        <div
          onClick={() => {
            this.list( {
              method: 'GET',
            });
          }}
        >无credentials</div>
        <div
          onClick={() => {
            this.list( {
              method: 'GET',
              credentials: 'include',
            });
          }}
        >有credentials</div>
      </div>
    );
  }
};

Test

npm start

浏览器打开 http://localhost:8000/#/

  • 点击"无credentials"

弹出框如下

server-cookie-01.png

cookie如下

server-cookie-02.png
  • 点击"有credentials"

弹出框如下

server-cookie-03.png

cookie如下

server-cookie-04.png

浏览器打开 http://localhost:8000/#/list

  • 点击"无credentials"

弹出框如下

server-cookie-05.png
  • 点击"有credentials"

弹出框如下

server-cookie-06.png

关于fetch更多介绍参考【翻译】这个API很“迷人”——(新的Fetch API)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • =========================================================...
    lavor阅读 8,871评论 0 5
  • 要加“m”说明是MB,否则就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505阅读 10,367评论 0 53
  • 高爷爷讲到“公民意识”,他讲得慷慨激昂,而我们涕泗横流。 我也在反思自己,我又没有“公民意识”呢?有责任感,有道德...
    看天空蓝蓝阅读 1,558评论 0 0
  • 0x00 Tiger简介 一款开源的安全审计&入侵检测工具 我们的小老虎是一款可以用于安全审计和入侵检测系统的安全...
    cr4zyd0g阅读 11,302评论 0 51

友情链接更多精彩内容