{"id":173,"date":"2026-06-17T19:32:22","date_gmt":"2026-06-17T11:32:22","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=173"},"modified":"2026-06-17T19:32:22","modified_gmt":"2026-06-17T11:32:22","slug":"flask-session-%e4%b8%8e-cookie","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2026\/06\/17\/flask-session-%e4%b8%8e-cookie\/","title":{"rendered":"Flask Session \u4e0e Cookie"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5728 Web \u5f00\u53d1\u4e2d\uff0cHTTP \u534f\u8bae\u662f<strong>\u65e0\u72b6\u6001<\/strong>\u7684\uff0c\u8fd9\u610f\u5473\u7740\u670d\u52a1\u5668\u65e0\u6cd5\u81ea\u52a8\u8bb0\u4f4f\u201c\u4f60\u662f\u8c01\u201d\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u5f15\u5165\u4e86 <strong>Cookie<\/strong> \u548c <strong>Session<\/strong> \u6765\u7ef4\u6301\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u5668\u4e4b\u95f4\u7684\u72b6\u6001\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Flask \u4e2d\uff0c\u8fd9\u4e24\u8005\u7684\u4f7f\u7528\u975e\u5e38\u4f18\u96c5\uff0c\u4f46 Flask \u7684 Session \u673a\u5236\u4e0e\u4f20\u7edf\u7684 Java\/PHP \u6709\u6240\u4e0d\u540c\uff0c\u9700\u8981\u7279\u522b\u6ce8\u610f\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udca1 \u6838\u5fc3\u6982\u5ff5\u533a\u5206<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7279\u6027<\/th><th class=\"has-text-align-left\" data-align=\"left\">Cookie<\/th><th class=\"has-text-align-left\" data-align=\"left\">Session (Flask \u9ed8\u8ba4\u5b9e\u73b0)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5b58\u50a8\u4f4d\u7f6e<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5ba2\u6237\u7aef<\/strong>\uff08\u6d4f\u89c8\u5668\uff09<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5ba2\u6237\u7aef<\/strong>\uff08\u4ee5\u52a0\u5bc6\u7b7e\u540d\u7684 Cookie \u5f62\u5f0f\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5b89\u5168\u6027<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8f83\u4f4e\uff0c\u7528\u6237\u53ef\u67e5\u770b\u548c\u7be1\u6539<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8f83\u9ad8\uff0c\u7528\u6237\u53ef\u67e5\u770b\u4f46<strong>\u65e0\u6cd5\u7be1\u6539<\/strong>\uff08\u6709\u7b7e\u540d\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5bb9\u91cf\u9650\u5236<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ea6 4KB<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ea6 4KB\uff08\u53d7\u9650\u4e8e Cookie \u5927\u5c0f\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u9002\u7528\u573a\u666f<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8bb0\u4f4f\u7528\u6237\u540d\u3001\u504f\u597d\u8bbe\u7f6e\u3001\u8ffd\u8e2a ID<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7528\u6237\u767b\u5f55\u72b6\u6001\u3001\u8d2d\u7269\u8f66\u4e34\u65f6\u6570\u636e<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>\u91cd\u8981\u63d0\u793a<\/strong>\uff1aFlask \u9ed8\u8ba4\u7684 Session \u662f<strong>\u5ba2\u6237\u7aef Session<\/strong>\u3002\u5b83\u628a\u6570\u636e\u5e8f\u5217\u5316\u540e\uff0c\u7528 <code>SECRET_KEY<\/code> \u7b7e\u540d\uff0c\u7136\u540e\u4f5c\u4e3a Cookie \u53d1\u7ed9\u6d4f\u89c8\u5668\u3002\u670d\u52a1\u5668\u7aef\u4e0d\u4fdd\u5b58\u4efb\u4f55 Session \u6570\u636e\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u64cd\u4f5c Cookie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cookie \u662f\u9644\u52a0\u5728 HTTP \u8bf7\u6c42\u548c\u54cd\u5e94\u5934\u4e2d\u7684\u3002\u56e0\u6b64\uff0c<strong>\u8bfb\u53d6 Cookie \u7528 <code>request<\/code>\uff0c\u8bbe\u7f6e\/\u5220\u9664 Cookie \u7528 <code>response<\/code><\/strong>\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4ee3\u7801\u793a\u4f8b\uff1a<\/h4>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><span>14<\/span><span>15<\/span><span>16<\/span><span>17<\/span><span>18<\/span><span>19<\/span><span>20<\/span><span>21<\/span><span>22<\/span><span>23<\/span><span>24<\/span><span>25<\/span><span>26<\/span><span>27<\/span><span>28<\/span><span>29<\/span><span>30<\/span><span>31<\/span><span>32<\/span><span>33<\/span><span>34<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import Flask, request, make_response\n\napp = Flask(__name__)\n\n# 1. \u8bbe\u7f6e Cookie\n@app.route(&#039;\/set-cookie&#039;)\ndef set_cookie():\n    # \u5fc5\u987b\u4f7f\u7528 make_response \u5c06\u8fd4\u56de\u503c\u5305\u88c5\u6210\u54cd\u5e94\u5bf9\u8c61\n    resp = make_response(&#039;Cookie \u8bbe\u7f6e\u6210\u529f\uff01&#039;)\n\n    # \u8bbe\u7f6e Cookie: key, value, max_age(\u6709\u6548\u671f\uff0c\u5355\u4f4d\uff1a\u79d2)\n    # \u5982\u679c\u4e0d\u8bbe\u7f6e max_age\uff0c\u5219\u9ed8\u8ba4\u4e3a\u4f1a\u8bdd\u7ea7 Cookie\uff08\u6d4f\u89c8\u5668\u5173\u95ed\u5373\u5931\u6548\uff09\n    resp.set_cookie(&#039;username&#039;, &#039;john_doe&#039;, max_age=3600) \n    resp.set_cookie(&#039;theme&#039;, &#039;dark&#039;) # \u6d4f\u89c8\u5668\u5173\u95ed\u5373\u5931\u6548\n    return resp\n\n# 2. \u8bfb\u53d6 Cookie\n@app.route(&#039;\/get-cookie&#039;)\ndef get_cookie():\n    # \u4f7f\u7528 request.cookies \u5b57\u5178\u83b7\u53d6\n    # \u63a8\u8350\u4f7f\u7528 .get() \u65b9\u6cd5\uff0c\u907f\u514d key \u4e0d\u5b58\u5728\u65f6\u62a5 KeyError\n    username = request.cookies.get(&#039;username&#039;, &#039;\u533f\u540d\u7528\u6237&#039;)\n    theme = request.cookies.get(&#039;theme&#039;, &#039;light&#039;)\n\n    return f&#039;\u4f60\u597d, {username}! \u4f60\u7684\u4e3b\u9898\u8bbe\u7f6e\u662f: {theme}&#039;\n\n# 3. \u5220\u9664 Cookie\n@app.route(&#039;\/delete-cookie&#039;)\ndef delete_cookie():\n    resp = make_response(&#039;Cookie \u5df2\u5220\u9664\uff01&#039;)\n    # \u5220\u9664 Cookie \u5b9e\u9645\u4e0a\u662f\u5c06\u5b83\u7684\u8fc7\u671f\u65f6\u95f4\u8bbe\u7f6e\u4e3a\u8fc7\u53bb\n    resp.delete_cookie(&#039;username&#039;)\n    resp.delete_cookie(&#039;theme&#039;)\n    return resp<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u64cd\u4f5c Session \u2b50 (\u6838\u5fc3\u91cd\u70b9)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Flask \u4e2d\u4f7f\u7528 Session \u975e\u5e38\u7b80\u5355\uff0c\u5b83\u5c31\u50cf\u4e00\u4e2a\u5b57\u5178\u3002\u4f46\u6709\u4e00\u4e2a<strong>\u7edd\u5bf9\u7684\u524d\u63d0\u6761\u4ef6<\/strong>\uff1a<strong>\u5fc5\u987b\u914d\u7f6e <code>SECRET_KEY<\/code><\/strong>\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u524d\u63d0\u914d\u7f6e\uff1a<\/h4>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">app = Flask(__name__)\n# \u5fc5\u987b\u8bbe\u7f6e\u4e00\u4e2a\u590d\u6742\u4e14\u4fdd\u5bc6\u7684\u5bc6\u94a5\uff0c\u7528\u4e8e\u5bf9 Session \u6570\u636e\u8fdb\u884c\u52a0\u5bc6\u7b7e\u540d\napp.config[&#039;SECRET_KEY&#039;] = &#039;your-super-secret-key-here-change-in-production&#039;<\/code><\/pre><\/div><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u4ee3\u7801\u793a\u4f8b\uff1a\u6a21\u62df\u7528\u6237\u767b\u5f55\u72b6\u6001<\/h4>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><span>14<\/span><span>15<\/span><span>16<\/span><span>17<\/span><span>18<\/span><span>19<\/span><span>20<\/span><span>21<\/span><span>22<\/span><span>23<\/span><span>24<\/span><span>25<\/span><span>26<\/span><span>27<\/span><span>28<\/span><span>29<\/span><span>30<\/span><span>31<\/span><span>32<\/span><span>33<\/span><span>34<\/span><span>35<\/span><span>36<\/span><span>37<\/span><span>38<\/span><span>39<\/span><span>40<\/span><span>41<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import Flask, session, redirect, url_for, request\n\napp = Flask(__name__)\napp.config[&#039;SECRET_KEY&#039;] = &#039;super-secret-key-123&#039;\n\n# 1. \u767b\u5f55\uff1a\u5199\u5165 Session\n@app.route(&#039;\/login&#039;, methods=[&#039;GET&#039;, &#039;POST&#039;])\ndef login():\n    if request.method == &#039;POST&#039;:\n        username = request.form.get(&#039;username&#039;)\n        # \u5c06\u6570\u636e\u5b58\u5165 session \u5b57\u5178\n        session[&#039;username&#039;] = username\n        session[&#039;is_logged_in&#039;] = True\n        return redirect(url_for(&#039;index&#039;))\n\n    return &#039;&#039;&#039;\n        &lt;form method=&quot;post&quot;&gt;\n            &lt;input type=&quot;text&quot; name=&quot;username&quot; placeholder=&quot;Username&quot;&gt;\n            &lt;input type=&quot;submit&quot; value=&quot;Login&quot;&gt;\n        &lt;\/form&gt;\n    &#039;&#039;&#039;\n\n# 2. \u9996\u9875\uff1a\u8bfb\u53d6 Session\n@app.route(&#039;\/&#039;)\ndef index():\n    # \u4f7f\u7528 .get() \u5b89\u5168\u8bfb\u53d6\n    if session.get(&#039;is_logged_in&#039;):\n        return f&#039;\u6b22\u8fce\u56de\u6765, {session.get(&quot;username&quot;)}! &lt;a href=&quot;\/logout&quot;&gt;\u767b\u51fa&lt;\/a&gt;&#039;\n    return &#039;\u4f60\u8fd8\u672a\u767b\u5f55\uff0c\u8bf7 &lt;a href=&quot;\/login&quot;&gt;\u767b\u5f55&lt;\/a&gt;\u3002&#039;\n\n# 3. \u767b\u51fa\uff1a\u5220\u9664 Session\n@app.route(&#039;\/logout&#039;)\ndef logout():\n    # \u79fb\u9664\u7279\u5b9a key\n    session.pop(&#039;username&#039;, None)\n    session.pop(&#039;is_logged_in&#039;, None)\n\n    # \u6216\u8005\u6e05\u7a7a\u6574\u4e2a session\n    # session.clear() \n\n    return redirect(url_for(&#039;index&#039;))<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Flask Session \u7684\u201c\u5751\u201d\u4e0e\u5b89\u5168\u987b\u77e5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u4e3a Flask \u7684 Session \u672c\u8d28\u4e0a\u662f<strong>\u52a0\u5bc6\u7b7e\u540d\u7684 Cookie<\/strong>\uff0c\u6240\u4ee5\u5b83\u7ee7\u627f\u4e86 Cookie \u7684\u6240\u6709\u7269\u7406\u9650\u5236\u548c\u5b89\u5168\u7279\u6027\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u274c \u7edd\u5bf9\u4e0d\u80fd\u505a\u7684\u4e8b\uff1a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e0d\u8981\u5b58\u50a8\u654f\u611f\u4fe1\u606f<\/strong>\uff1a\u867d\u7136\u6570\u636e\u88ab\u7b7e\u540d\uff08\u65e0\u6cd5\u7be1\u6539\uff09\uff0c\u4f46\u5b83\u662f Base64 \u7f16\u7801\u7684\uff0c<strong>\u7528\u6237\u53ef\u4ee5\u8f7b\u677e\u89e3\u7801\u5e76\u770b\u5230\u5185\u5bb9<\/strong>\uff08\u4f8b\u5982\u4f7f\u7528\u6d4f\u89c8\u5668\u7684\u5f00\u53d1\u8005\u5de5\u5177\uff09\u3002<strong>\u7edd\u5bf9\u4e0d\u8981\u5b58\u5bc6\u7801\u3001\u8eab\u4efd\u8bc1\u53f7\u3001\u4fe1\u7528\u5361\u53f7\uff01<\/strong><\/li>\n\n\n\n<li><strong>\u4e0d\u8981\u5b58\u50a8\u5927\u91cf\u6570\u636e<\/strong>\uff1aCookie \u7684\u5927\u5c0f\u9650\u5236\u901a\u5e38\u662f 4KB\u3002\u5982\u679c\u4f60\u5728 Session \u91cc\u5b58\u4e86\u4e00\u4e2a\u5305\u542b\u51e0\u5343\u6761\u8bb0\u5f55\u7684\u5217\u8868\uff0c\u4f1a\u5bfc\u81f4\u8bf7\u6c42\u5934\u8fc7\u5927\uff0c\u6d4f\u89c8\u5668\u76f4\u63a5\u62a5\u9519\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u2705 \u5b89\u5168\u6700\u4f73\u5b9e\u8df5\uff1a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>SECRET_KEY<\/code> \u5fc5\u987b\u590d\u6742<\/strong>\uff1a\u4f7f\u7528\u968f\u673a\u751f\u6210\u7684\u957f\u5b57\u7b26\u4e32\uff0c\u4e14\u4e0d\u8981\u63d0\u4ea4\u5230 Git\u3002\u751f\u4ea7\u73af\u5883\u5e94\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u8bfb\u53d6\u3002<\/li>\n\n\n\n<li><strong>\u5f00\u542f\u5b89\u5168\u6807\u5fd7<\/strong>\uff08\u5728\u914d\u7f6e\u4e2d\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">   # \u4ec5\u901a\u8fc7 HTTPS \u4f20\u8f93 Cookie\n   app.config[&#039;SESSION_COOKIE_SECURE&#039;] = True \n   # \u7981\u6b62 JavaScript \u8bfb\u53d6 Cookie (\u9632 XSS \u653b\u51fb)\n   app.config[&#039;SESSION_COOKIE_HTTPONLY&#039;] = True \n   # \u9650\u5236 Cookie \u53ea\u80fd\u540c\u6e90\u53d1\u9001 (\u9632 CSRF \u653b\u51fb)\n   app.config[&#039;SESSION_COOKIE_SAMESITE&#039;] = &#039;Lax&#039; <\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u8fdb\u9636\uff1a\u771f\u6b63\u7684\u201c\u670d\u52a1\u5668\u7aef Session\u201d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u9700\u8981\u7a81\u7834 4KB \u7684\u9650\u5236\uff0c\u6216\u8005\u7edd\u5bf9\u4e0d\u60f3\u628a\u4efb\u4f55\u6570\u636e\u53d1\u7ed9\u5ba2\u6237\u7aef\uff0c\u4f60\u9700\u8981\u4f7f\u7528<strong>\u670d\u52a1\u5668\u7aef Session<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b64\u65f6\uff0cCookie \u91cc\u53ea\u5b58\u4e00\u4e2a\u968f\u673a\u7684 <code>session_id<\/code>\uff0c\u771f\u6b63\u7684\u6570\u636e\u5b58\u50a8\u5728\u670d\u52a1\u5668\u7aef\u7684 Redis \u6216\u6570\u636e\u5e93\u4e2d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5b9e\u73b0\u65b9\u6cd5<\/strong>\uff1a\u4f7f\u7528\u5b98\u65b9\u6269\u5c55 <code>Flask-Session<\/code>\u3002<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">pip install Flask-Session redis<\/code><\/pre><\/div><\/div>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><span>14<\/span><span>15<\/span><span>16<\/span><span>17<\/span><span>18<\/span><span>19<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import Flask, session\nfrom flask_session import Session\nimport redis\n\napp = Flask(__name__)\n\n# \u914d\u7f6e Flask-Session \u4f7f\u7528 Redis \u4f5c\u4e3a\u540e\u7aef\napp.config[&#039;SESSION_TYPE&#039;] = &#039;redis&#039;\napp.config[&#039;SESSION_REDIS&#039;] = redis.from_url(&#039;redis:\/\/127.0.0.1:6379&#039;)\napp.config[&#039;SECRET_KEY&#039;] = &#039;super-secret-key&#039;\n\n# \u521d\u59cb\u5316\u6269\u5c55\nSession(app)\n\n@app.route(&#039;\/&#039;)\ndef index():\n    # \u7528\u6cd5\u4e0e\u9ed8\u8ba4 Session \u5b8c\u5168\u4e00\u6837\uff01\n    session[&#039;huge_data&#039;] = &#039;A&#039; * 10000  # \u73b0\u5728\u53ef\u4ee5\u5b58\u5927\u6570\u636e\u4e86\n    return &#039;Data stored in Redis!&#039;<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcdd \u603b\u7ed3<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u64cd\u4f5c<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5bf9\u8c61<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u4ee3\u7801\u793a\u4f8b<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u8bfb Cookie<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.cookies.get('key')<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5199 Cookie<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>response<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>resp = make_response(...)<\/code><br><code>resp.set_cookie('key', 'val')<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5220 Cookie<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>response<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>resp.delete_cookie('key')<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u8bfb Session<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>session<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>session.get('key')<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5199 Session<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>session<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>session['key'] = 'value'<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5220 Session<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>session<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>session.pop('key', None)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u638c\u63e1\u4e86 Cookie \u548c Session\uff0c\u4f60\u7684 Flask \u5e94\u7528\u5c31\u5177\u5907\u4e86\u201c\u8bb0\u5fc6\u201d\u80fd\u529b\uff0c\u53ef\u4ee5\u5b9e\u73b0\u7528\u6237\u767b\u5f55\u3001\u6743\u9650\u63a7\u5236\u7b49\u6838\u5fc3\u529f\u80fd\u4e86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\uff0c\u4f60\u60f3\u5b66\u4e60\u5982\u4f55<strong>\u4f7f\u7528 Jinja2 \u6a21\u677f\u5f15\u64ce<\/strong>\uff08\u8ba9 HTML \u9875\u9762\u52a8\u6001\u5316\uff09\uff0c\u8fd8\u662f\u76f4\u63a5\u6311\u6218<strong>\u8fde\u63a5\u6570\u636e\u5e93 (Flask-SQLAlchemy)<\/strong>\uff1f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 Web \u5f00\u53d1\u4e2d\uff0cHTTP \u534f\u8bae\u662f\u65e0\u72b6\u6001\u7684\uff0c\u8fd9\u610f\u5473\u7740\u670d\u52a1\u5668&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-173","post","type-post","status-publish","format-standard","hentry","category-flask-"],"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=173"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/173\/revisions"}],"predecessor-version":[{"id":174,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/173\/revisions\/174"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}