日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

响应设置cookie_注册登录 与 Cookie

發布時間:2025/3/15 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 响应设置cookie_注册登录 与 Cookie 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開始之前,我們先簡單了解一下 注冊/登錄 的流程。(無代碼)

  • 進入注冊頁面,用戶填入用戶名、密碼、手機號等“注冊信息”。
  • 前端驗證用戶填入的信息是否符合要求,如果不符合要求,就提示用戶輸入錯誤,重新輸入。
  • 如果符合要求,就將“注冊信息”作為 post 的第四部分(字符串),向后端發起 post 請求。
  • 后端收到 post 請求,將 post 的第四部分(字符串)轉變成能用的格式。
  • 后端拿到數據后,進行數據驗證。
  • 數據驗證如果不通過,后端就返回 400(狀態碼)和錯誤信息(JSON 格式)給前端,前端根據錯誤信息,提示用戶哪里輸入錯誤。
  • 數據驗證如果通過,就將數據存入數據庫。
  • 存入數據庫時,先檢查數據庫中是否包含該用戶信息。
  • 如果包含,后端返回錯誤信息給前端,前端提示用戶“已注冊”。
  • 如果不包含,就將該用戶數據寫入數據庫,并向前端發送響應,前端提示用戶“注冊成功”并跳轉至登錄頁面。
  • 用戶填入“登錄信息”。
  • 前端驗證“登錄信息”是否符合要求,如果不符合,就重新輸入。
  • 如果符合,將“登錄信息”作為 post 的第四部分,向后端發起 post 請求。
  • 后端收到 post 請求,將 post 的第四部分(字符串)轉變成能用的格式。
  • 后端拿到數據后,與數據庫的數據進行比對。
  • 如果發現數據庫沒有該用戶信息,就向前端發送“錯誤信息”,前端提示用戶“未注冊”。
  • 如果數據庫匹配到該用戶信息,并且信息一致,說明該用戶已注冊,后端發送響應給前端,前端提示用戶“登錄成功”并跳轉至首頁(或其他頁面)。
  • 上面過程中,有一個注意點:

    為什么前端和后端都要驗證一遍用戶填入的信息?

    首先我們要知道,前端其實是可以不用驗證用戶填入的信息的,但是后端一定要驗證。

    但是如果前端不驗證的話,就要發送一個請求給后端,讓后端驗證,如果后端驗證失敗,又要發個響應給前端。這無形中增加了請求和響應,也就給服務器增添了負擔,不利于網絡性能優化。所以最好讓前端先把用戶信息驗證好,如果用戶填入的信息沒有問題,再將信息發送給后端。這樣就不用來回的發送請求和響應。

    另外,有些人可能會通過命令行,使用 curl 來訪問服務器,這樣一來就直接繞過了前端,直接訪問后端。如果后端不驗證,那么就可能出現安全問題了。

    以上是注冊登錄的簡單版本,實際工作中,會比這復雜的多。

    下面有兩張流程圖,可以清晰看出 注冊/登錄 的流程。

    注冊

    登錄

    圖片來自 segmentfault 。


    我們都知道,一個網站,你登錄了和沒登錄,看到的頁面是不一樣的。

    那么服務器是如何區分你是登錄了還是沒登錄呢?或者你登錄了以后,跳轉到其他頁面,其他頁面是怎么知道你是已經登錄的狀態呢?這就需要用到 Cookie 了。

    Cookie

    什么是 Cookie?

    Cookie 是服務器通過 HTTP 響應,寫入瀏覽器的一小段文本信息。

    為什么要使用Cookie?

    Cookie 主要用來分辨兩個請求是否來自同一個瀏覽器,以及用來保存一些狀態信息。

    分辨請求是否來自同一個瀏覽器:

    比如,你的電腦上同時安裝了 Chrome 瀏覽器和 Safari 瀏覽器。當你用 Chrome 登錄知乎后,再使用 Safari 登錄時,會要求你重新登錄。這是因為,服務器給 Chrome 的 Cookie 和 給 Safari 的 Cookie 是不一樣的。就好比,你和你弟弟去游樂園玩,游樂園會給你們兩張票,一張對你有用,一張對你弟弟有用,你不能用你弟弟的票,你弟弟也不能用你的票。

    保存一些狀態信息:

    比如,你登錄知乎后,在一段時間內,即使你關閉了瀏覽器,當再次打開知乎時,可以不用登錄。這是因為,Cookie 中包含了“過期時間”,只要你在“過期”以前重新打開知乎,就可以不用登錄。就好比,游樂園的門票的有效期為兩天,在這兩天時間內,不管你干嘛,哪怕你出園了,當你再次進入游樂園時,檢票員發現你的票還沒有過期,你就可以直接進入游樂園,不用再次買票。

    怎么寫 Cookie?

    Cookie 是服務器寫入瀏覽器的一小段文本信息,形如:

    response.setHeader('Set-Cookie', 'userName=dongdong; password=123') // 返回給瀏覽器的 Cookie 記錄了用戶名和密碼

    當然,服務器也可以設置多個 Cookie ,那么 HTTP 響應中就會包含多個 Set-Cookie 字段:

    HTTP/1.1 200 OK Content-type: text/html Set-Cookie: a=1 Set-Cookie: b=2[page content]

    瀏覽器向服務器發送請求時,就會帶上這段文本信息,形如:

    GET /xxx.html HTTP/1.1 Host: www.example.org Cookie: userName=dongdong; password=123 // 瀏覽器帶上的 Cookie 有用戶名和密碼

    這樣一來,服務器只要讀取瀏覽器帶上的 Cookie(票拿來給我看看),然后和服務器中的數據做對比(檢查票上的信息),如果驗證通過,就可以訪問。

    Cookie 的屬性

    Expires,Max-Age

    上面說到,Cookie 是有過期時間的。在服務器,我們可以通過 Expires 和 Max-Age 兩個屬性來設置。如:

    response.setHeader('Set-Cookie', 'expires=Wed, 21 Oct 2015 07:28:00 GMT') response.setHeader('Set-Cookie', 'max-age=30')

    上面代碼中,分別通過 Expires 和 Max-Age 屬性來設置過期時間,那么這兩個有什么區別呢?

    • Expires 設置的是具體的過期時間,比如 xxx 年 xxx 月 xxx 日 xx : xx : xx ,到了這個時間后,Cookie 就會被刪除;
    • Max-Age 設置的是從現在開始 Cookie 存在的秒數,比如有效期為 30s,30s 后,Cookie 就會被刪除。

    如果同時指定了 Expires 和 Max-Age,那么 Max-Age 的值將優先生效。

    如果沒有指定這兩個屬性,那么這個 Cookie 就是 Session Cookie,只在當前會話(Session)有效,如果關閉瀏覽器,那么 Cookie 就會被刪除。

    Secure,HttpOnly

    Secure 和 HttpOnly 屬性,可以不用指定屬性值,如:

    response.setHeader('Set-Cookie', 'Secure') response.setHeader('Set-Cookie', 'HttpOnly')

    Secure 屬性指定瀏覽器只有在 HTTPS 協議下,才能將 Cookie 發送給服務器。另外,如果協議是 HTTP,那么瀏覽器會自動忽略服務器發來的 Secure 屬性。換句話說,Secure 只在 HTTPS 協議下有效。

    HttpOnly 屬性指定只有在瀏覽器發出請求時,才會帶上該 Cookie,該 Cookie 無法通過 JavaScript 腳本拿到。

    比如通過 document.cookie 可以拿到當前網頁的 Cookie:

    document.cookie // "foo=bar;baz=bar"

    但是如果該 Cookie 設置了 HttpOnly 屬性,那就無法拿到 Cookie。

    END~~

    總結

    以上是生活随笔為你收集整理的响应设置cookie_注册登录 与 Cookie的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。