1. 程式人生 > >微信開發:Cookie在前端寫還是後端?

微信開發:Cookie在前端寫還是後端?

做微信開發,要分辨使用者,不可避免地就要涉及到cookie操作,那麼cookie到底是在前端寫還是在後端寫,各有什麼優勢和缺點呢?今天咱們就來討論一下,以完整的微信授權過程為例。

1. 前端寫cookie

前端寫cookie對前端理解整個專案的邏輯來說有很大的幫助,也更符合慣性思維,我想要獲取使用者的資訊,那麼就把使用者的id提供給你。

  • 優勢:前端邏輯清晰,容易理解
  • 缺點:不安全,cookie可能被篡改

2. 後端寫cookie

後端寫cookie對前端來說就是個黑盒子,我只要向後端傳送申請,就可以拿到當前使用者的資訊,儘管我不知道使用者的id。操作簡單,理解起來不太友好。

  • 優勢:操作簡單,安全性高
  • 缺點:好像沒啥缺點

3. 兩邊都寫cookie

這應該就是2B程式猿的典型做法了。很不湊巧,剛做的一個專案就是這個乾的,還因此引出了很多bug,掛出這種寫法的流程圖,梳理一下bug產生的原因。

從圖中可以看到,這種實現方法實際上是存在問題的。前後端同時寫了cookie,前端的cookie有效期是在設定cookie時設定的,後端cookie的有效期是通過session來限定的。如果兩個有效期是相同的,那麼可能看不到什麼問題。但如果兩次寫cookie的有效期是不相同的,而且前端過期的時間晚於後端過期的時間,那麼就會出現一個bug:

前端以為cookie仍有效所以不經過微信授權直接向後端獲取資料,而後端session已經失效無法讀到cookie中相應的uid,就會導致獲取使用者資訊失敗。

問題產生的根源在於,前端所寫的cookie並不是用來獲取使用者資訊使用的,而是為了人為地設定一個使用者不需重複認證的時間段(可能是一週,或者十天,或者一個月),而後端的cookie是為了獲取使用者資訊而寫的。兩者的目的不同,再加上溝通問題,導致了bug的產生。

綜上所述,建議在後端進行寫cookie操作,並通過session(面向連線)來控制cookie的過期時間。