{"id":622,"date":"2021-04-19T16:35:38","date_gmt":"2021-04-19T08:35:38","guid":{"rendered":"http:\/\/blog.viter.top\/?p=622"},"modified":"2021-04-19T16:35:38","modified_gmt":"2021-04-19T08:35:38","slug":"nestjs-%e4%b8%ad-session-%e7%9a%84%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"https:\/\/blog.viter.top\/index.php\/2021\/04\/19\/nestjs-%e4%b8%ad-session-%e7%9a%84%e4%bd%bf%e7%94%a8\/","title":{"rendered":"Nestjs \u4e2d Session \u7684\u4f7f\u7528"},"content":{"rendered":"\n<p>\u4e00\u3001 Session \u7b80\u5355\u4ecb\u7ecd<br>session \u662f\u53e6\u4e00\u79cd\u8bb0\u5f55\u5ba2\u6237\u72b6\u6001\u7684\u673a\u5236\uff0c\u4e0d\u540c\u7684\u662f Cookie \u4fdd\u5b58\u5728\u5ba2\u6237\u7aef\u6d4f\u89c8\u5668\u4e2d\uff0c\u800c session \u4fdd\u5b58<br>\u5728\u670d\u52a1\u5668\u4e0a\u3002<\/p>\n\n\n\n<p>\u4e8c\u3001 Session \u7684\u5de5\u4f5c\u6d41\u7a0b<br>\u5f53\u6d4f\u89c8\u5668\u8bbf\u95ee\u670d\u52a1\u5668\u5e76\u53d1\u9001\u7b2c\u4e00\u6b21\u8bf7\u6c42\u65f6\uff0c\u670d\u52a1\u5668\u7aef\u4f1a\u521b\u5efa\u4e00\u4e2a session \u5bf9\u8c61\uff0c\u751f\u6210\u4e00\u4e2a\u7c7b\u4f3c\u4e8e<br>key,value \u7684\u952e\u503c\u5bf9\uff0c\u7136\u540e\u5c06 key(cookie)\u8fd4\u56de\u5230\u6d4f\u89c8\u5668(\u5ba2\u6237)\u7aef\uff0c\u6d4f\u89c8\u5668\u4e0b\u6b21\u518d\u8bbf\u95ee\u65f6\uff0c\u643a\u5e26 key(cookie)\uff0c<br>\u627e\u5230\u5bf9\u5e94\u7684 session(value)\u3002 \u5ba2\u6237\u7684\u4fe1\u606f\u90fd\u4fdd\u5b58\u5728 session \u4e2d<\/p>\n\n\n\n<p>\u4e09\u3001 Nestjs \u4e2d express-session \u7684\u4f7f\u7528:<br>https:\/\/docs.nestjs.com\/techniques\/session#session<br>1\u3001\u5b89\u88c5 express-session<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm i express-session --save\r\nnpm i -D @types\/express-session --save<\/code><\/pre>\n\n\n\n<p>2\u3001\u5f15\u5165 express-session<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import * as session from 'express-session';<\/code><\/pre>\n\n\n\n<p>3\u3001\u8bbe\u7f6e\u5b98\u65b9\u6587\u6863\u63d0\u4f9b\u7684\u4e2d\u95f4\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))<\/code><\/pre>\n\n\n\n<p>4\u3001\u4f7f\u7528<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u8bbe\u7f6e\u503c req.session.username = \"\u5f20\u4e09\";\r\n\u83b7\u53d6\u503c req.session.username<\/code><\/pre>\n\n\n\n<p>\u56db\u3001 express-session \u7684\u5e38\u7528\u53c2\u6570:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.use(session({\r\nsecret: '12345',\r\nname: 'name',\r\ncookie: {maxAge: 60000},\r\nresave: false,\r\nsaveUninitialized: true\r\n}));<\/code><\/pre>\n\n\n\n<p>secret \u4e00\u4e2a String \u7c7b\u578b\u7684\u5b57\u7b26\u4e32\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\u7aef\u751f\u6210 session \u7684\u7b7e\u540d\u3002<br>name \u8fd4\u56de\u5ba2\u6237\u7aef\u7684 key \u7684\u540d\u79f0\uff0c\u9ed8\u8ba4\u4e3a connect.sid,\u4e5f\u53ef\u4ee5\u81ea\u5df1\u8bbe\u7f6e\u3002<br>resave \u5f3a\u5236\u4fdd\u5b58 session \u5373\u4f7f\u5b83\u5e76\u6ca1\u6709\u53d8\u5316,\u3002\u9ed8\u8ba4\u4e3a true\u3002\u5efa\u8bae\u8bbe\u7f6e\u6210 false\u3002 don't save session if unmodified<br>saveUninitialized \u5f3a\u5236\u5c06\u672a\u521d\u59cb\u5316\u7684 session \u5b58\u50a8\u3002\u5f53\u65b0\u5efa\u4e86\u4e00\u4e2a session \u4e14\u672a\u8bbe\u5b9a\u5c5e\u6027\u6216\u503c\u65f6\uff0c\u5b83\u5c31\u5904\u4e8e<br>\u672a\u521d\u59cb\u5316\u72b6\u6001\u3002\u5728\u8bbe\u5b9a\u4e00\u4e2a cookie \u524d\uff0c\u8fd9\u5bf9\u4e8e\u767b\u9646\u9a8c\u8bc1\uff0c\u51cf\u8f7b\u670d\u52a1\u7aef\u5b58\u50a8\u538b\u529b\uff0c\u6743\u9650\u63a7\u5236\u662f\u6709\u5e2e\u52a9\u7684\u3002\uff08\u9ed8<br>\u8ba4\uff1atrue\uff09\u3002\u5efa\u8bae\u624b\u52a8\u6dfb\u52a0\u3002<br>cookie \u8bbe\u7f6e\u8fd4\u56de\u5230\u524d\u7aef key \u7684\u5c5e\u6027\uff0c\u9ed8\u8ba4\u503c\u4e3a{ path: \u2018\/\u2019, httpOnly: true, secure: false, maxAge: null }\u3002<br>rolling \u5728\u6bcf\u6b21\u8bf7\u6c42\u65f6\u5f3a\u884c\u8bbe\u7f6e cookie\uff0c\u8fd9\u5c06\u91cd\u7f6e cookie \u8fc7\u671f\u65f6\u95f4\uff08\u9ed8\u8ba4\uff1afalse\uff09<\/p>\n\n\n\n<p>\u4e94\u3001 express-session \u7684\u5e38\u7528\u65b9\u6cd5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>req.session.destroy(function(err) { \/*\u9500\u6bc1 session*\/\r\n})\r\nreq.session.username='\u5f20\u4e09'; \/\/\u8bbe\u7f6e session\r\nreq.session.username \/\/\u83b7\u53d6 session\r\nreq.session.cookie.maxAge=0; \/\/\u91cd\u65b0\u8bbe\u7f6e cookie \u7684\u8fc7\u671f\u65f6\u95f4<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001 Session \u7b80\u5355\u4ecb\u7ecdsession \u662f\u53e6\u4e00\u79cd\u8bb0\u5f55\u5ba2\u6237\u72b6\u6001\u7684\u673a\u5236\uff0c\u4e0d\u540c\u7684\u662f Cookie \u4fdd\u5b58\u5728\u5ba2\u6237\u7aef\u6d4f\u89c8\u5668\u4e2d\uff0c\u800c ses &#8230;<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[16],"_links":{"self":[{"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/posts\/622"}],"collection":[{"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/comments?post=622"}],"version-history":[{"count":1,"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/posts\/622\/revisions"}],"predecessor-version":[{"id":623,"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/posts\/622\/revisions\/623"}],"wp:attachment":[{"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/media?parent=622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/categories?post=622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.viter.top\/index.php\/wp-json\/wp\/v2\/tags?post=622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}