1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4497],{6424:(n,s,a)=>{a.r(s),a.d(s,{data:()=>e});const e={key:"v-3d499c1a",path:"/articles/Node/koa%E7%B3%BB%E5%88%97%EF%BC%884%EF%BC%89-koa%E5%AE%9E%E7%8E%B0cookie%E5%92%8Csession.html",title:"koa2使ç¨cookie",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"ä½¿ç¨æ¹æ³",slug:"ä½¿ç¨æ¹æ³",children:[]},{level:2,title:"ä¾å代ç ",slug:"ä¾å代ç ",children:[]},{level:2,title:"è¿è¡ä¾å",slug:"è¿è¡ä¾å",children:[{level:3,title:"æ§è¡èæ¬",slug:"æ§è¡èæ¬",children:[]},{level:3,title:"è¿è¡ç»æ",slug:"è¿è¡ç»æ",children:[]}]},{level:2,title:"åè¨",slug:"åè¨",children:[]},{level:2,title:"æ°æ®åºå卿¹æ¡",slug:"æ°æ®åºå卿¹æ¡",children:[]},{level:2,title:"å¿«é使ç¨",slug:"å¿«é使ç¨",children:[{level:3,title:"ä¾å代ç ",slug:"ä¾å代ç -1",children:[]},{level:3,title:"è¿è¡ä¾å",slug:"è¿è¡ä¾å-1",children:[]}]}],filePathRelative:"articles/Node/koaç³»åï¼4ï¼-koaå®ç°cookieåsession.md",git:{}}},1470:(n,s,a)=>{a.r(s),a.d(s,{default:()=>C});var e=a(6252);const p=(0,e._)("h1",{id:"koa2使ç¨cookie",tabindex:"-1"},[(0,e._)("a",{class:"header-anchor",href:"#koa2使ç¨cookie","aria-hidden":"true"},"#"),(0,e.Uk)(" koa2使ç¨cookie")],-1),t=(0,e._)("h2",{id:"ä½¿ç¨æ¹æ³",tabindex:"-1"},[(0,e._)("a",{class:"header-anchor",href:"#ä½¿ç¨æ¹æ³","aria-hidden":"true"},"#"),(0,e.Uk)(" ä½¿ç¨æ¹æ³")],-1),o=(0,e._)("p",null,"koaæä¾äºä»ä¸ä¸æç´æ¥è¯»åãåå
¥cookieçæ¹æ³",-1),l=(0,e._)("ul",null,[(0,e._)("li",null,"ctx.cookies.get(name, [options]) 读åä¸ä¸æè¯·æ±ä¸çcookie"),(0,e._)("li",null,"ctx.cookies.set(name, value, [options]) å¨ä¸ä¸æä¸åå
¥cookie")],-1),c=(0,e.Uk)("koa2 䏿ä½çcookiesæ¯ä½¿ç¨äºnpmçcookies模åï¼æºç å¨"),i={href:"https://github.com/pillarjs/cookies",target:"_blank",rel:"noopener noreferrer"},r=(0,e.Uk)("https://github.com/pillarjs/cookies"),u=(0,e.Uk)("ï¼æä»¥å¨è¯»åcookieç使ç¨åæ°ä¸è¯¥æ¨¡åç使ç¨ä¸è´ã"),k=(0,e.uE)('<h2 id="ä¾å代ç " tabindex="-1"><a class="header-anchor" href="#ä¾å代ç " aria-hidden="true">#</a> ä¾å代ç </h2><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> Koa <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'koa'</span><span class="token punctuation">)</span>\n<span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Koa</span><span class="token punctuation">(</span><span class="token punctuation">)</span>\n\napp<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">ctx</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>\n\n <span class="token keyword">if</span> <span class="token punctuation">(</span> ctx<span class="token punctuation">.</span>url <span class="token operator">===</span> <span class="token string">'/index'</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span>\n ctx<span class="token punctuation">.</span>cookies<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>\n <span class="token string">'cid'</span><span class="token punctuation">,</span> \n <span class="token string">'hello world'</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n domain<span class="token operator">:</span> <span class="token string">'localhost'</span><span class="token punctuation">,</span> <span class="token comment">// åcookieæå¨çåå</span>\n path<span class="token operator">:</span> <span class="token string">'/index'</span><span class="token punctuation">,</span>
1 <span class="token comment">// åcookieæå¨çè·¯å¾</span>\n maxAge<span class="token operator">:</span> <span class="token number">10</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">,</span> <span class="token comment">// cookieæææ¶é¿</span>\n expires<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'2017-02-15'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// cookieå¤±ææ¶é´</span>\n httpOnly<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token comment">// æ¯å¦åªç¨äºhttp请æ±ä¸è·å</span>\n overwrite<span class="token operator">:</span> <span class="token boolean">false</span> <span class="token comment">// æ¯å¦å
许éå</span>\n <span class="token punctuation">}</span>\n <span class="token punctuation">)</span>\n ctx<span class="token punctuation">.</span>body <span class="token operator">=</span> <span class="token string">'cookie is ok'</span>\n <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>\n ctx<span class="token punctuation">.</span>body <span class="token operator">=</span> <span class="token string">'hello world'</span> \n <span class="token punctuation">}</span>\n\n<span class="token punctuation">}</span><span class="token punctuation">)</span>\n\napp<span class="token punctuation">.</span><span class="token function">listen</span><span class="token punctuation">(</span><span class="token number">3000</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>\n console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'[demo] cookie is starting at port 3000'</span><span class="token punctuation">)</span>\n<span class="token punctuation">}</span><span class="token punctuation">)</span>\n\n\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br></div></div><h2 id="è¿è¡ä¾å" tabindex="-1"><a class="header-anchor" href="#è¿è¡ä¾å" aria-hidden="true">#</a> è¿è¡ä¾å</h2><h3 id="æ§è¡èæ¬" tabindex="-1"><a class="header-anchor" href="#æ§è¡èæ¬" aria-hidden="true">#</a> æ§è¡èæ¬</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>node index.js\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br></div></div><h3 id="è¿è¡ç»æ" tabindex="-1"><a class="header-anchor" href="#è¿è¡ç»æ" aria-hidden="true">
1#</a> è¿è¡ç»æ</h3>',6),b={id:"访é®http-localhost-3000-index",tabindex:"-1"},d=(0,e._)("a",{class:"header-anchor",href:"#访é®http-localhost-3000-index","aria-hidden":"true"},"#",-1),m=(0,e.Uk)(" 访é®"),h={href:"http://localhost:3000/index",target:"_blank",rel:"noopener noreferrer"},g=(0,e.Uk)("http://localhost:3000/index"),f=(0,e.uE)('<ul><li>å¯ä»¥å¨æ§å¶å°çcookieå表ä¸ä¸çå°åå¨é¡µé¢ä¸çcookie</li><li>卿§å¶å°çconsoleä¸ä½¿ç¨document.cookieå¯ä»¥æå°åºå¨é¡µé¢çææcookieï¼éè¦æ¯httpOnly设置falseæè½æ¾ç¤ºï¼</li></ul><p><img src="https://s2.loli.net/2022/06/18/jDM7ki51dLeF4Hc.png" alt="cookie-result-01.png"></p><h1 id="koa2å®ç°session" tabindex="-1"><a class="header-anchor" href="#koa2å®ç°session" aria-hidden="true">#</a> koa2å®ç°session</h1><h2 id="åè¨" tabindex="-1"><a class="header-anchor" href="#åè¨" aria-hidden="true">#</a> åè¨</h2><p>koa2åçåè½åªæä¾äºcookieçæä½ï¼ä½æ¯æ²¡ææä¾sessionæä½ãsessionå°±åªç¨èªå·±å®ç°æè
éè¿ç¬¬ä¸æ¹ä¸é´ä»¶å®ç°ãå¨koa2ä¸å®ç°sessionçæ¹æ¡æä¸ä¸å ç§</p><ul><li>妿sessionæ°æ®éå¾å°ï¼å¯ä»¥ç´æ¥åå¨å
åä¸</li><li>妿sessionæ°æ®éå¾å¤§ï¼åéè¦åå¨ä»è´¨åæ¾sessionæ°æ®</li></ul><h2 id="æ°æ®åºå卿¹æ¡" tabindex="-1"><a class="header-anchor" href="#æ°æ®åºå卿¹æ¡" aria-hidden="true">#</a> æ°æ®åºå卿¹æ¡</h2><ul><li>å°sessionåæ¾å¨MySQLæ°æ®åºä¸</li><li>éè¦ç¨å°ä¸é´ä»¶ <ul><li>koa-session-minimal éç¨äºkoa2 çsessionä¸é´ä»¶ï¼æä¾åå¨ä»è´¨çè¯»åæ¥å£ ã</li><li>koa-mysql-session 为koa-session-minimalä¸é´ä»¶æä¾MySQLæ°æ®åºçsessionæ°æ®è¯»åæä½ã</li><li>å°sessionIdå对åºçæ°æ®åå°æ°æ®åº</li></ul></li><li>å°æ°æ®åºçåå¨çsessionIdåå°é¡µé¢çcookieä¸</li><li>æ ¹æ®cookieçsessionIdå»è·å对äºçsessionä¿¡æ¯</li></ul><h2 id="å¿«é使ç¨" tabindex="-1"><a class="header-anchor" href="#å¿«é使ç¨" aria-hidden="true">#</a> å¿«é使ç¨</h2><p>demoæºç </p>',10),x={href:"https://github.com/ChenShenhai/koa2-note/blob/master/demo/session/index.js",target:"_blank",rel:"noopener noreferrer"},y=(0,e.Uk)("https://github.com/ChenShenhai/koa2-note/blob/master/demo/session/index.js"),v=(0,e.uE)('<h3 id="ä¾å代ç -1" tabindex="-1"><a class="header-anchor" href="#ä¾å代ç -1" aria-hidden="true">#</a> ä¾å代ç </h3><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> Koa <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'koa'</span><span class="token punctuation">)</span>\n<span class="token keyword">const</span> session <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'koa-session-minimal'</span><span class="token punctuation">)</span>\n<span class="token keyword">const</span> MysqlSession <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'koa-mysql-session'</span><span class="token punctuation">)</span>\n\n<span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Koa</span><span class="token punctuation">(</span><span class="token punctuation">)</span>\n\n<span class="token comment">// é
ç½®åå¨sessionä¿¡æ¯çmysql</span>\n<span class="token keyword">let</span> store <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MysqlSession</span><span class="token punctuation">(</span><span class="token punctuation">{</span>\n user<span class="token operator">:</span> <span class="token string">'root'</span><span class="token punctuation">,</span>\n password<span class="token operator">:</span> <span class="token string">'abc123'</span><span class="token punctuation">,</span>\n database<span class="token operator">:</span> <span class="token string">'koa_demo'</span><span class="token punctuation">,</span>\n host<span class="token operator">:</span> <span class="token string">'127.0.0.1'</span><span class="token punctuation">,</span>\n<span class="token punctuation">}</span><span class="token punctuation">)</span>\n\n<span class="token comment">// åæ¾sessionIdçcookieé
ç½®</span>\n<span class="token keyword">let</span> cookie <span class="token operator">=</span> <span class="token punctuation">{</span>\n maxAge<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// cookieæææ¶é¿</span>\n expires<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// cookieå¤±ææ¶é´</span>\n path<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// åcookieæå¨çè·¯å¾</span>\n domain<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// åcookieæå¨çåå</span>\n httpOnly<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// æ¯å¦åªç¨äºhttp请æ±ä¸è·å</span>\n overwrite<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span> <span class="token comment">// æ¯å¦å
许éå</span>\n secure<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span>\n sameSite<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span>\n signed<span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span>\n \n<span class="token punctuation">}</span>\n\n<span class="token comment">// 使ç¨sessionä¸é´ä»¶</span>\napp<span class="token punctuation">.</span><span class="token function">
1use</span><span class="token punctuation">(</span><span class="token function">session</span><span class="token punctuation">(</span><span class="token punctuation">{</span>\n key<span class="token operator">:</span> <span class="token string">'SESSION_ID'</span><span class="token punctuation">,</span>\n store<span class="token operator">:</span> store<span class="token punctuation">,</span>\n cookie<span class="token operator">:</span> cookie\n<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>\n\napp<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">ctx</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>\n\n <span class="token comment">// 设置session</span>\n <span class="token keyword">if</span> <span class="token punctuation">(</span> ctx<span class="token punctuation">.</span>url <span class="token operator">===</span> <span class="token string">'/set'</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span>\n ctx<span class="token punctuation">.</span>session <span class="token operator">=</span> <span class="token punctuation">{</span>\n user_id<span class="token operator">:</span> Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token number">36</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span>\n count<span class="token operator">:</span> <span class="token number">0</span>\n <span class="token punctuation">}</span>\n ctx<span class="token punctuation">.</span>body <span class="token operator">=</span> ctx<span class="token punctuation">.</span>session\n <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> ctx<span class="token punctuation">.</span>url <span class="token operator">===</span> <span class="token string">'/'</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\n <span class="token comment">// 读åsessionä¿¡æ¯</span>\n ctx<span class="token punctuation">.</span>session<span class="token punctuation">.</span>count <span class="token operator">=</span> ctx<span class="token punctuation">.</span>session<span class="token punctuation">.</span>count <span class="token operator">+</span> <span class="token number">1</span>\n ctx<span class="token punctuation">.</span>body <span class="token operator">=</span> ctx<span class="token punctuation">.</span>session\n <span class="token punctuation">}</span> \n \n<span class="token punctuation">}</span><span class="token punctuation">)</span>\n\napp<span class="token punctuation">.</span><span class="token function">listen</span><span class="token punctuation">(</span><span class="token number">3000</span><span class="token punctuation">)</span>\nconsole<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'[demo] session is starting at port 3000'</span><span class="token punctuation">)</span>\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">
153</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br></div></div><h3 id="è¿è¡ä¾å-1" tabindex="-1"><a class="header-anchor" href="#è¿è¡ä¾å-1" aria-hidden="true">#</a> è¿è¡ä¾å</h3><h4 id="æ§è¡å½ä»¤" tabindex="-1"><a class="header-anchor" href="#æ§è¡å½ä»¤" aria-hidden="true">#</a> æ§è¡å½ä»¤</h4><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>node index.js\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br></div></div><h4 id="访é®è¿æ¥è®¾ç½®session" tabindex="-1"><a class="header-anchor" href="#访é®è¿æ¥è®¾ç½®session" aria-hidden="true">#</a> 访é®è¿æ¥è®¾ç½®session</h4>',6),w={href:"http://localhost:3000/set",target:"_blank",rel:"noopener noreferrer"},_=(0,e.Uk)("http://localhost:3000/set"),E=(0,e._)("img",{src:"https://s2.loli.net/2022/06/18/HCWcUeikJONY387.png",alt:"session-result-01.png"},null,-1),j=(0,e.uE)('<h4 id="æ¥çæ°æ®åºsessionæ¯å¦åå¨" tabindex="-1"><a class="header-anchor" href="#æ¥çæ°æ®åºsessionæ¯å¦åå¨" aria-hidden="true">#</a> æ¥çæ°æ®åºsessionæ¯å¦åå¨</h4><p><img src="https://s2.loli.net/2022/06/18/lysX8VKS36L19WF.png" alt="session-result-03.png"></p><h4 id="æ¥çcookie䏿¯å¦ç§ä¸äºsessionid" tabindex="-1"><a class="header-anchor" href="#æ¥çcookie䏿¯å¦ç§ä¸äºsessionid" aria-hidden="true">#</a> æ¥çcookie䏿¯å¦ç§ä¸äºsessionId</h4>',3),S={href:"http://localhost:3000",target:"_blank",rel:"noopener noreferrer"},U=(0,e.Uk)("http://localhost:3000"),q=(0,e._)("img",{src:"https://s2.loli.net/2022/06/18/fWGwdV1j3pJmqUT.png",alt:"session-result-02.png"},null,-1),C={render:function(n,s){const a=(0,e.up)("OutboundLink");return(0,e.wg)(),(0,e.iD)(e.HY,null,[p,t,o,l,(0,e._)("p",null,[c,(0,e._)("a",i,[r,(0,e.Wm)(a)]),u]),k,(0,e._)("h4",b,[d,m,(0,e._)("a",h,[g,(0,e.Wm)(a)])]),f,(0,e._)("p",null,[(0,e._)("a",x,[y,(0,e.Wm)(a)])]),v,(0,e._)("p",null,[(0,e._)("a",w,[_,(0,e.Wm)(a)]),E]),j,(0,e._)("p",null,[(0,e._)("a",S,[U,(0,e.Wm)(a)]),q])],64)}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.