什么是cookie
存儲在瀏覽器的一段字符串(最大5k)
跨域不共享
格式如 k1=v1 k2=v2 因此可以存儲結構化數據
每次發送http請求,會將請求域的cookie一起發送給server
server 可以修改 cookie 並返回給瀏覽器
瀏覽器也可以通過 JS 修改 cookie (有限制)
參考 lesson5;
---
session方法
首先解釋何為 seesion【注意和 sessionStorage做區別】
首先,我大致的知道,session是一次瀏覽器和服務器的交互的會話,會話是啥呢?就是我問候你好嗎?你回恩很好。就是一次會話,那么對話完成后,這次會話就結束了,還有我也知道,我們可以將一個變量存入全部的$_SESSION['name']中,這樣php的各個頁面和邏輯都能訪問到,所以很輕松的用來判斷是否登陸。


安裝 redis
mac:訪問 https://brew.sh/index_zh-cn ,執行
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
就能安裝上 brew
執行 redis-server
然后新打開終端執行 redis-cli

最基本的命令:
set myname lihua
get myname
keys * //可以看到當前所有的key
del myname //刪除key
目的: nodejs 連接 redis 的demo; 封裝成工具函數,可以供 API 使用
首先啟動 redis: redis-server 端口是 6379
新建一個項目,npm init
然后 安裝redis: npm i redis --save
新建index文件:
const redis = require('redis') //創建客戶端 const client = redis.createClient(6379,'127.0.0.1'); client.on('error',err=>{ console.error(err) }) //redis.print 會在執行完命令后打印出是否正確 client.set('myname','zhangsan2',redis.print) client.get('myname',(err,val)=>{ if(err){ console.log(err); return; } console.log('val:',val); client.quit() })
執行 node index.js
然后可以啟動 redis-cli 查看 get myname
============================
接下來開始操作原來的博客項目,首先安裝 redis: npm i redis -save
詳見代碼。
===========================
和前端聯調

首先npm install http-server -g
http-server -p 8001 //設置端口
===================
nginx介紹:




以上是mac命令,對於windos如下:
1 首先修改配置文件 sudo vi /usr/local/etc/nginx/nginx.conf
1) 修改 端口為 8080
server{ listen 8080; server_name localhost }
2)
location / { proxy_pass http://localhost:8001; } location /api/ { proxy_pass http://localhost:8000; proxy_set_header Host $host; }
最后執行 wq 保存退出
然后啟動 nginx
訪問http://localhost:8080/ 就可以訪問到 localhost:8001 的html
訪問的接口api 就訪問到了 localhost:8000的api
【所以要同時啟動 服務端8000;客戶端8001;nginx的服務;redis的服務】【沒有啟動8080的,但是通過nginx,可以通過8080訪問其他端口】
[注意:如果接口訪問不到 請注意排查一下是不是接口寫的是post,而你用的是get請求]
=========
最后 一些小修改:
admin.html 中,由於只能訪問自己的頁面:
let author = req.query.author || ''; let keyword = req.query.keyword || ''; //新增admin部分 if(req.query.isadmin){ const loginCheckResult = loginCheck(req); if(loginCheckResult){ //未登陸 return loginCheckResult } // 強制查詢自己的博客,也就是說有這個參數的時候,不在使用url上給到的usernam // 而是使用當前登陸信息中的 username author = req.session.username }
//app.js中的session和cookie和redis的配置 const session = require('koa-generic-session'); const redisStore = require('koa-redis'); const { REDIS_CONF } =require('./conf/db'); app.keys=['keys']; app.use(session({ cookie:{ httpOnly:true, path:'/', maxAge:24*60*60*1000 }, store:redisStore({ all:`${REDIS_CONF.host}:${REDIS_CONF.port}` }) })) //給session賦值的時候,會觸發 生成cookie ctx.session.username = ctx.request.body.username;
cookie-->session-->redis
瀏覽器和服務器通過cookieid獲取到session
保存的session通過app中的配置,會把session保存到redis中,同時會生成一個cookieid;
通過cookied可以獲取到所有的session信息