思维导图:

(1) 保存 cookie

(2)销毁 cookie

一,保存 cookie

1,app.js  。 新增代码

var Cookies = require('cookies')
/**
* 5,配置 cookie -------------------【注意顺序】 -----------【配置文件要放在路由前面】
* 通过中间件的形式,只有用户访问网站,都会经过这个程序
*/
app.use((req,res,next)=>{
  //调用 cookies 的方法把 cookie 加载到 【 req 】 这个对象里面
  req.cookies = new Cookies(req,res)
 
  /**
  * 获取浏览器 之前保存好放在头信息中发送给服务端的 cookie ,随便加载哪一个页面,都会获取到。
  * 获取到的为字符串,需要转换为对象
  */
 
  // console.log(req.cookies.get('userInfo'))
  // console.log(typeof req.cookies.get('userInfo'))
  /**
  * 判断用户是否登陆
  * 1,创建一个全局变量,给任何路由访问。 把数据保存到 req 对象中
  */
  //解析登陆用户的 cookie 信息
  req.userInfo = {}
  if(req.cookies.get('userInfo')){
    try {
      req.userInfo = JSON.parse(req.cookies.get('userInfo'))
  } catch (error) {
 
  }
}
  // 通过对象的 get和set 方法 来获取和设置 cookie  =>  通过 api.js 来操作
  
  next()
})

2,/router/api.js  。 新增代码

/**
* 向浏览器发送一个cookie信息
* JSON.stringfy => 保存字符串 => 存入到 userInfo
*/
req.cookies.set('userInfo',JSON.stringify({
  _id :userInfo._id,
  username : userInfo.username
}))
res.json(responseData)
return
 
3,/public/js/index.js  。ajax修改部分
success:(data)=>{
  console.log(data)
  if(data.userInfo.username){
 
    /**
    * 因为使用了模板语法渲染。 => 重载页面
    */
    window.location.reload()
  }
  
  if(data.userInfo.username=='admin'){
    $admin.show();
  }else{
    $admin.hide();
  }
 
}

4,前端页面 /views/login.html

 
{% if userInfo._id %}
<div class="userinfo">
<h2>hello 。 <span id="user">{{userInfo.username}}</span></h2>
<a href="/logout" id="logout">退出登陆</a>
</div>
 
<div id="admin" class="none">
你是管理员,<a href="/admin">你可以点击这里进入应用后台管理中心</a><br>
</div>
{% else %}
<div class="form" id="register">
  <div class="form-group">
    <label for="username">用户名</label>
    <input type="text" class="form-control" id="username" name="username" placeholder="User">
  </div>
  <div class="form-group">
    <label for="password">密码</label>
    <input type="password" class="form-control" id="password" name="password" placeholder="Password">
  </div>
  <div class="form-group">
    <label for="repassword">密码</label>
    <input type="password" class="form-control" id="repassword" name="repassword" placeholder="Password">  
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">注册</button>
    <div class="info"></div>
  </div>
  已有账号?马上<a class="change" href="javacript:void(0);">登陆</a>
</div>
<div class="form" id="login">
  <div class="form-group">
    <label for="username">用户名</label>
    <input type="text" class="form-control" id="username" name="username" placeholder="User">
  </div>
  <div class="form-group">
    <label for="password">密码</label>
    <input type="password" class="form-control" id="password" name="password" placeholder="Password">
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">登 陆</button>
  </div>
  还没注册?马上<a class="change" href="javacript:void(0);">注册</a>
</div>
{% endif %}
 
二,注销 cookie
 
1,/public/js/index.js  
$logout.on('click',()=>{
  $.ajax({
    url:'/api/user/logout',
    success:(data)=>{
      if(!data.code){
        window.location.reload()
      }
    }
  })
})
 

2,/router/api.js

router.get('/user/logout',(req,res,next)=>{
  req.cookies.set('userInfo',null)
  res.json(responseData)
})
 
 
三,优化   =》可在注册成功后直接登陆

10 ~ express ~ 使用 cookie 保存用户 信息的更多相关文章

  1. java的web项目中使用cookie保存用户登陆信息

    本文转自:http://lever0066.iteye.com/blog/1735963 最近在编写论坛系统的实现,其中就涉及到用户登陆后保持会话直到浏览器关闭,同时可以使用cookie保存登陆信息以 ...

  2. jQuery 操作cookie保存用户浏览信息

    使用jQuery操作cookie之前需要引入jQuery的一个cookie小组件js,代码如下:   /*         jQuery cookie plugins */jQuery.cookie ...

  3. spring boot:用cookie保存i18n信息避免每次请求时传递参数(spring boot 2.3.3)

    一,用cookie保存i18n信息的优点? 当开发一个web项目(非api站)时,如果把i18n的选择信息保存到cookie, 则不需要在每次发送请求时都传递所选择语言的参数, 也不需要增加heade ...

  4. 利用Cookie保存用户身份信息实现免登录

    <%@page import="sun.misc.BASE64Encoder"%> <%@page import="java.util.Base64.E ...

  5. 不使用cookie记录用户信息

    cookie是什么: cookie是由web服务器保存在用户浏览器(客户端)上的小文件,它可以包含用户信息,用户操作信息等等,无论何时访问服务器,只要同源,就能携带到服务端 常见方式 一般:请求一个接 ...

  6. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  7. [转]Asp.Net Core 简单的使用加密的Cookie保存用户状态

    本文转自:http://www.cnblogs.com/Joes/p/6023820.html 在以前的Asp.Net中可以用 FormsAuthentication 类的一系列方法来使用加密的Coo ...

  8. Asp.Net Core 简单的使用加密的Cookie保存用户状态

    在以前的Asp.Net中可以用 FormsAuthentication 类的一系列方法来使用加密的Cookie存储用户身份,使用简单,可控性强.在Asp.Net Core中是否也可以的?答案是当然的. ...

  9. 如何用cookie保存用户的登录的密码和用户名

    思路:绘制一个简单的登录界面的Servlet并要在此页面中读取保存密码和用户名的cookie--->在登录处理界面的servlet中把用户名和密码保存到cookie中 //登录界面的Servle ...

随机推荐

  1. 6专题总结-动态规划dynamic programming

    专题6--动态规划 1.动态规划基础知识 什么情况下可能是动态规划?满足下面三个条件之一:1. Maximum/Minimum -- 最大最小,最长,最短:写程序一般有max/min.2. Yes/N ...

  2. Pyspider的基本使用 -- 入门

    简介 一个国人编写的强大的网络爬虫系统并带有强大的WebUI 采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器 官方文档: ...

  3. log4j, common-logging, slf4j 关系

    最近因为项目原因,认真学习了一下 log4j 相关内容,主要是从网上找资料,以及追踪原代码.   关于如何使用,网上有很多资料,这里不做具体介绍.下面介绍一下这些工具的关系.   log4j 是最强大 ...

  4. 在github上保存vscode的配置(后续重新安装vscode时,可以十分方便地从github上下载安装这个保存的配置)

    1 安装拓展 Settings Sync 在 VSCode 拓展中搜索 Settings Sync 并安装,安装完成后,重启 2 设置 Github Person Access Token 进入这个页 ...

  5. 物联网学习笔记——构建RESTFul平台1

    0.前言     前些时间顺着Yeelink学习了RESTFUL,使用PHP和Slim框架尝试实现简单的REST API,树莓派可通过GET方法获得JSON数据包,通过这种方式实现了树莓派和服务器(我 ...

  6. redis集群JedisCluster连接关闭问题

    JedisCluster连接关闭问题 set方法为例 //伪代码 JedisCluster jedisCluster = new JedisCluster(); jedisCluster.set(&q ...

  7. Vue中 v-for 绑定key和不绑定key的区别

    首先,它们区别主要在于 虚拟DOM的复用,绑定key可以更好的复用,下面来详细讲一下 假如我们有一个数组 arr = [1,2,3,4],我们要在2后面插入一个值9: 如果绑定了key值,那么会是这样 ...

  8. C++ 动态多态

    背景 以前的学习,只是简单地知道:面向对象的三大特性(封装.继承.多态) ,在项目开发中,用到了多态而自己却不知道. 多态(Polymorphism)按字面的意思就是"多种状态". ...

  9. ThinkPad重大更新!5款创意设计PC齐发2日

    导读 日前,ThinkPad巨匠P系列专业移动工作站迎来全线更新,包括ThinkPad P1隐士2019.ThinkPad P53.ThinkPad P73.ThinkPad P43s.ThinkPa ...

  10. oracle通用帮助类

    需要的dll( EntityFramework.6.0.0Oracle.ManagedDataAccess.12.1.2400System.Configuration.dllEmitMapper.1. ...