是不是現在的網站都用session了?不用了cookie了?

來源:互聯網
上載者:User
是嗎 cookie沒用了嗎

回複內容:

是嗎 cookie沒用了嗎

似乎沒人說到重點。

簡單來說,session在伺服器端儲存網站連結接狀態/資料的,cookie是在瀏覽器端記錄連結狀態/資料的。

HTTP協議是無狀態的,就是說一個瀏覽器請求網頁,接收完網頁之後瀏覽器斷開與伺服器的連結,伺服器不會再記住這個連結的,當瀏覽器再發送請求的時候伺服器總是把這個請求當作新的請求,伺服器不知道這個瀏覽器以前發送過什麼東西。比如使用者登入這個問題,當瀏覽器發送使用者名稱密碼登入成功之後,會斷開與伺服器的連結,那麼再發送請求的時候就伺服器其實是不知道這個瀏覽器登入過了。

所以為瞭解決這個問題,伺服器就在 HTTP 頭裡加入了一個cookie,瀏覽器收到之後就會儲存起來。瀏覽器每次發送請求的時候都會把這個cookie順帶發送給伺服器,那麼伺服器就可以通過瀏覽器發送過來的 cookie 知道這個瀏覽器以前發送過什麼請求(如果伺服器記錄過得話)。說到登入就是,瀏覽器發送 POST 請求登入之後,伺服器返回一個登入成功,並且包含了隨機產生的唯一cookie,那麼瀏覽器以後的請求都會發送這個cookie,伺服器讀取這個cookie,那麼伺服器就知道以前這個使用者登入過了。當然cookie也可以用來在瀏覽器端儲存資料,在瀏覽器端js是可以讀取cookie的,所以可以儲存一些資料,等使用者下次訪問網頁的時候就可以讀取,比如,某些網頁的遊戲的你曾經獲得的最高分,甚至是使用者名稱和密碼(不過HTML5支援其他的方式,存到cookie裡的越來越少了),發送到伺服器端,伺服器不理會就是了。

剛才說道登入的時候,使用者登入之後伺服器會分配一個唯一的 cookie,那麼伺服器當然也需要儲存這個cookie,另外為了記錄這個瀏覽器以前做過什麼,那麼也必須記錄在這個cookie下發送過的一些請求,比如使用者登入之前的頁面是某個頁面下,登入後需要給人家跳回去呀(就是一些使用者曾經發送的請求,但有沒有必要寫入到資料庫裡的臨時資料)。PHP,Java等通過這個唯一的cookie(不一定是cookie,下面解釋)訪問這些資料"介面"叫做session。基本上就是聲明某些頁面使用session,然後你在這些session裡面儲存資料,PHP等會自動幫你產生唯一的cookie和儲存這個cookie對應的資料,而這些資料是不發送給瀏覽器端的。你不需要知道這個唯一的cookie是什麼和對應的資料存放區在哪裡,PHP等伺服器自動幫你處理這這些操作。所以說,其實session就相當於PHP等幫你實現了一個資料庫,儲存這個cookie及其對應的資料,只不過這些資料都是臨時的,不需要像資料庫那樣的永久儲存。(如果你想把這些資料存放區在cookie裡也是可以的,不過如果儲存的資料太多的話也是浪費頻寬什麼的,而這樣的實現的話每次多發送的資料只是這個唯一的cookie,另外每次都發送這些資料的話畢竟也不太安全。cookie可以在瀏覽器端偽造,所以所有重要資料都要加密儲存在cookie裡,但是如果使用唯一的密鑰又怕破解,使用不同的密鑰又不方便管理,而且加解密都要浪費計算資源,所以這些資料還是儲存在伺服器端吧)

剛才說的是,伺服器考cookie實現session,其實還有 URL重寫的方式實現 session。瀏覽器每次發送請求,其實還有一個地方可以儲存資料,那就是URL,所以上面說道的唯一標識可以到網頁中的url中。在網頁中的URL的末尾添加這個唯一標識,瀏覽器發送請求的時候依舊會把這個唯一標識發送過去。比如把http://www.example.com/path/to/file.php變成http://www.example.com/path/to/file.php;PHPSESSIONID=唯一標識。但是這種方式有一個確定,那就是需要在伺服器端代碼的每一個網頁的每一處連結手動的完成這個URL的轉換,顯然沒有使用cookie的方式方便。

session也是靠cookie實現的

cookie可以長期儲存一些資料
session則是短期維持會話資料
兩者不衝突
大多數session都是用cookie實現的

兩者各有用處,不能代替。

一般來說,session只存在於會話期,一旦結束會話就不存在了。就算不結束會話,一般也會在一定時間後被清除,所以只能用來緩衝一些不需要持久化的資料。

cookie除了可以存在於會話期,還可以相對長時間的儲存資料。比如你要保持登入,就要用cookie。session的session id也是用cookie儲存的,不過這是php自己進行的不需要你幹預。

cookie

cookie存在用戶端。用戶端可以讀取cookie儲存內容。
每次發起請求,用戶端找出頁面的cookie傳給伺服器。
cookie內容改變一般有兩種:

  1. 每次請求時,伺服器返回內容,設定cookie。

  2. 用戶端的js指令碼之類也可以改變cookie

session

基於cookie,用於儲存session的id。
session存取都在伺服器。客服端不知道session儲存內容,但知道sessionID。
每次發起請求,sessionID隨著cookie傳給伺服器。
session內容只能由伺服器讀取和改變。

儲存期限都是有對應設定的,不存在什麼這個儲存時間長、那個短。(但是有個安全性問題參見下文)
cookie由儲存者(伺服器或者用戶端)指定,每個cookie內容有單獨的有效期間設定;
session在伺服器有設定,有效期間是對於整個session來說的。

cookie是可以偽造的,而session儲存在伺服器無法篡改。session儲存內容更安全。
當然你看了上面可能會說:sessionID儲存在cookie裡,cookie可以偽造,所以可以偽造sessionID啊。
一般來說,偽造一個有效sessionID還是有難度的。引出的另一個問題偽造session與題幹無關不再贅述。

只需要服務端用到、用戶端不需要 的資料,推薦用session。不想讓用戶端知道的敏感性資料尤其適用。

需要用戶端臨時使用,不需要伺服器儲存 的 資料,推薦用cookie。比如頁面統計裡跟蹤使用者行為的臨時資料

有些情況下用session或者純cookie都可以,此時就要結合特點去衡量採用什麼。
一般現在採用session比較多,現在網站也不缺那點空間資源

cookie:節省伺服器資源,可以長期有效,不安全,適合存不重要的資訊。
session:佔用伺服器資源,一般使用者操作期間才有效,安全,適合存重要訊息。

session是server端儲存會話資料的,一般會畫結束就會銷毀,所以生命週期很短暫,不可以長期儲存資料。
cookie是儲存在client端的,可長期儲存資料。

  • session 也需要 cookies 技術的支援

  • 不建議直接在 cookies 中存東西,首選 session

session需要用到cookie的呢

cookie肯定會用,例如網站登入後,產生一個key,key除了放緩衝外,還會把相關的值儲存到cookie,當要驗證使用者是否登入的時候,直接拿對應cookie的值,再在緩衝比較

“網站登入狀態儲存7天”,這個就要靠COOKIE解決,如果用session,由於seesion是儲存在服務端,伺服器會有被塞暴內容的風險

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.