Python Flask session 學習心得

更新於 發佈於 閱讀時間約 6 分鐘

前言

在完成ALPHA Camp學期2-3的課程,因為接著上了彭彭老師的WeHelp coding bootcamp,再加上年底工作也較忙,似乎還沒機會好好整理學期2-3的心得,這邊可能至少先欠一篇文章,想先根據這周末學習Flask session的運作機制做些簡單的紀錄。

何謂Flask

相較於之前學習是建立在Express架構,再透過Mongoose這個ODM操作MongoDB,這次訓練營的課程則是先使用Python Flask這個套件。Flask 是個輕量級的應用程式框架(micro-framework),簡單說就是彈性較佳且使用較簡單,不像另一個Python常使用的Web應用程式框架Django,可能在表單驗證、template enginee有自己的寫法,Flask給予開發者較多的彈性可以使用更多套件增加功能,另有些優點供大家參考 :

  • 符合WSGI ⇒ WSGI是個由Python定義的通用介面,建立於Web框架與Web server之間,一個WSGI的流程用以將客戶端的請求傳遞給Web應用程式,再將後端Server-side的回應傳回給客戶端。一般來說客戶端的靜態內容會由web server提供,http動態的數據則透過WSGI交給Web框架提供,常見的web server有Apache、IIS等,常見的Web框架有Flask、Django。由於Flask 是運用Werkzeug 這個函示庫開發的框架,而Werkzeug又符合WSGI的規範,因此Flask其實符合WSGI的標準,可以讓我們更方便設定web server,至於Flask 如何體現WSGI可參考此文章
  • Jinja2樣版引擎 ⇒ 如同Express裡面handlebars的功能,在Flask因為使用此樣板引擎,可以讓我們直接使用render_template到一個html檔案並與後端server溝通,避免在該路由撰寫太多html語法,造成程式碼難以維護與閱讀。
  • 不會決定使用哪個資料庫,但提供各種擴充套件整合不同資料庫。
  • 可執行偵錯,如有錯誤會向PYTHON CONSOLE、HTTP CLIENT送出請求。

Flask session

在介紹什麼是Flask後,在完成第四周的作業也稍微另外學習Flask session是如何運作的。依照自己先前的瞭解,http是個無狀態的通訊協定,每個request都是各自執行且不會留存任何紀錄,因此需要用session去儲存資料,讓我們可以在同一個Web應用程式去讀取不同的page。通常是在server端利用session存資料,前端的web server的cookie資訊裡面則會有個session id,在瀏覽器發送請求時會夾帶cookie,後端的AP server會跟據session id找到相對應的session物件並回傳給瀏覽器。然而Flask的session機制好像與我之前的認知稍有不同,並非建立於server端,而是client端的cookie based。

在Flask將資料儲存在session這個object裡面時,可看成是儲存在client端,因為資料其實是存在web server,每次新增內容到session就會新增一個新的cookie(cryptographically-signed cookies),並透過secret_key做簽章。需注意的是這所謂的「secret_key」並不是用於加密(切勿儲存機密資料),而是用來做數位簽章確認資料的完整性,簡單說是每個人都可以知道cookie裡面的資料,但只有server知道cookie是否被串改,如果被串改就無法登入該帳戶。

這裡做個簡單的驗證,以我第四週交的作業為例,登入後的request封包看似有經過加密,

raw-image

但實際上此字串是透過base64進行編碼,將其進行decode後,就可以取得cookie裡面的session資料,這也是為什麼建議不要儲存敏感性資料。

raw-image

且我們亦可透過瀏覽器的開發者工具嘗試修改cookie的值

raw-image

再重新整理此頁面就會發現被登出,這來自於後端伺服器驗證cookie遭竄改故使其失效。

raw-image

結尾

以上是這周目前對於Flask多學習的簡單心得,希望之後在完成作業之餘,也可多找資料讓學習不僅僅只侷限於visual studio code上的程式碼,而是更瞭解後面所使用套件的運作原理。

參考資源

  1. Developing Web Applications with Python and Flask - Introduction | TestDriven.io
  2. Free Intermediate Flask Course | Rithm School
  3. [AF] ELI5: how sessions work in Flask? : flask (reddit.com)
  4. WSGI、Flask及Werkzeug三者之间的关系_慕城南风的博客-CSDN博客_wsgi werkzeug
  5. Python Web — 快速建置網站的Flask套件. 一般我們想到Python程式,就會聯想到大數據、資料分析、AI等等的應用範疇;想… | by Sean Yeh | Medium





留言
avatar-img
留言分享你的想法!
Curtis Deng-avatar-img
2022/11/13
請問為什麼沒有繼續參加AC的第3學期,而是選擇彭彭老師的WeHelp coding bootcamp呢?
avatar-img
Blockcyber的沙龍
2會員
15內容數
紀錄轉職路上的點點滴滴
Blockcyber的沙龍的其他內容
2023/01/18
Introduction to WebRTC 由於之後想要做的專題是跟即時視訊相關,在開始作業前想對webrtc有些基本的了解,結果就是一踏入了解就發現這個水深的可怕,之後每天除了寫一點go,也會花時間學習這個協定。WebRTC是個用於瀏覽器之間溝通的協定,透過NAT Traversal(STUN、
Thumbnail
2023/01/18
Introduction to WebRTC 由於之後想要做的專題是跟即時視訊相關,在開始作業前想對webrtc有些基本的了解,結果就是一踏入了解就發現這個水深的可怕,之後每天除了寫一點go,也會花時間學習這個協定。WebRTC是個用於瀏覽器之間溝通的協定,透過NAT Traversal(STUN、
Thumbnail
2023/01/17
Stress testing 一早起床發現昨天辛苦整天網站又不能跑了,去看error.log發現原來是有其他服務使用到了80port,造成根本監聽不到,再去找找看是那些服務,結果可能是apache2使用到,直接怒sudo service apache2 stop,網站就恢復正常了。 今天除了再多熟悉
Thumbnail
2023/01/17
Stress testing 一早起床發現昨天辛苦整天網站又不能跑了,去看error.log發現原來是有其他服務使用到了80port,造成根本監聽不到,再去找找看是那些服務,結果可能是apache2使用到,直接怒sudo service apache2 stop,網站就恢復正常了。 今天除了再多熟悉
Thumbnail
2023/01/16
What the hack? 昨天信誓坦坦想說要將每天學習心得做一點紀錄,結果今天只做一件事,就是要把網站加上SSL憑證,再到Nginx做設定,以為一小時內就搞定的事情就處理了一整天...,可能是沒有分號、可能是url少了/符號、可能是沒有做port的導向、也可能檔案路徑設定錯誤,真的心中各種不甘,
Thumbnail
2023/01/16
What the hack? 昨天信誓坦坦想說要將每天學習心得做一點紀錄,結果今天只做一件事,就是要把網站加上SSL憑證,再到Nginx做設定,以為一小時內就搞定的事情就處理了一整天...,可能是沒有分號、可能是url少了/符號、可能是沒有做port的導向、也可能檔案路徑設定錯誤,真的心中各種不甘,
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
Thumbnail
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
Thumbnail
本文將介紹如何從頭開始建立一個Django專案,包括安裝和設定,以及創建管理員帳戶和新的app。透過本文,你可以學習到建立自己的網頁的所有步驟和設定。
Thumbnail
本文將介紹如何從頭開始建立一個Django專案,包括安裝和設定,以及創建管理員帳戶和新的app。透過本文,你可以學習到建立自己的網頁的所有步驟和設定。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
前言 在完成ALPHA Camp學期2-3的課程,因為接著上了彭彭老師的WeHelp coding bootcamp,再加上年底工作也較忙,似乎還沒機會好好整理學期2-3的心得,這邊可能至少先欠一篇文章,想先根據這周末學習Falsk session的運作機制做些簡單的紀錄。 何謂Flask
Thumbnail
前言 在完成ALPHA Camp學期2-3的課程,因為接著上了彭彭老師的WeHelp coding bootcamp,再加上年底工作也較忙,似乎還沒機會好好整理學期2-3的心得,這邊可能至少先欠一篇文章,想先根據這周末學習Falsk session的運作機制做些簡單的紀錄。 何謂Flask
Thumbnail
保護後端重要資訊 在 django 專案中我們會把設定都寫在 settings.py 內,包含了 SECRET_KEY 等機密資訊,通常專案都會做版本控制上 git,但把這些機密資訊也上 git 是很不好的一件事,畢竟 github 也是曾經被駭過的,所以最好是把這些不想讓別人知道的資訊寫在另外一個
Thumbnail
保護後端重要資訊 在 django 專案中我們會把設定都寫在 settings.py 內,包含了 SECRET_KEY 等機密資訊,通常專案都會做版本控制上 git,但把這些機密資訊也上 git 是很不好的一件事,畢竟 github 也是曾經被駭過的,所以最好是把這些不想讓別人知道的資訊寫在另外一個
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News