搜尋
首頁web前端js教程帶你了解session和cookie作用原理差異和用法(圖文教學)

這篇文章主要介紹了session和cookie作用原理,區別和用法,以及使用過程中的優缺點,透過列舉區別和原理,使讀者更能理解兩者之間的關係,需要的朋友可以參考下

Cookie概念

      在瀏覽某些網站時,這些網站會把一些資料存在客戶端,用於使用網站等跟踪使用者,實現使用者自訂功能.

是否設定過期時間:

#      若不設定過期時間,則表示這個Cookie生命週期為瀏覽器會話期間, 只要關閉瀏覽器,cookie就消失了.
      這個生命期為瀏覽會話期的cookie,就是會話Cookie;

儲存:   
      一般儲存於記憶體,不在硬碟;
      如果設定了過期時間, 瀏覽器會把cookie保存在硬碟上,關閉再開啟瀏覽器, 這些cookie依然有效直到超過的設定過期時間;
      儲存在硬碟上的Cookie可以在不同的瀏覽器進程間共享,例如兩個IE視窗。
      而適用於儲存 在記憶體的Cookie,不同的瀏覽器有不同的處理方式。

原則:

     如果瀏覽器使用的是cookie,那麼所有的資料都保存在瀏覽器端,
      例如你登入以後,伺服器設定了Cookie使用者名稱(username),那麼,當你再次請求伺服器的時候,瀏覽器會將username一塊傳送給伺服器,這些變數有一定的特殊標記。
     伺服器會解釋為 cookie變數。
     所以只要不關閉瀏覽器,那麼 cookie變數就一直是有效的,所以能夠保證長時間不斷線。
     如果你能夠截取某個使用者的 cookie變量,然後偽造一個資料包發送過去,那麼伺服器還是認為你是合法的。所以使用 cookie被攻擊的可能性比較大。
     如果設定了的有效時間,那麼它會將cookie保存在客戶端的硬碟上,下次再造訪該網站的時候,瀏覽器先檢查有沒有cookie,如果有的話,就讀取該cookie,然後發送給伺服器。
     如果你在機器上面保存了某個論壇cookie,有效期是一年,如果有人入侵你的機器,將你的cookie拷走,然後放在他的瀏覽器的目錄下面,那麼他登入該網站的時候就是用你的身分登入的。
     所以 cookie是可以偽造的。
     當然,偽造的時候需要主意,直接copy cookie文件到cookie目錄,瀏覽器是不認的,
     他有一個index.dat文件,儲存了cookie檔案的建立時間,以及是否有修改,所以你必須先要有網站的cookie文件,並且要從保證時間上騙過瀏覽器,
     曾經在學校的vbb論壇上面做過試驗,copy別人的cookie登錄,冒用了別人的名義發帖子,完全沒有問題。
 
cookie 使用:

  setcookie("user","zy",time()+3600); 设置user为zy,一小时之后失效;
  $_COOKIE['user'];     取回user值(名字)
  setcookie("user","",time()-3600); 删除cookie,第二个参数为空,第三个时间设置为小于系统的当前时间即可.

  或在瀏覽器設定

#      使用Cookie時,Cookie自動產生一個文字檔案儲存在IE瀏覽器的Cookie臨時資料夾,應用瀏覽器刪除Cookie檔案的特定操作步驟為
      >選擇IE瀏覽器中的工具/internet選項指令,開啟Internet選項對話框,
      >在一般標籤中點選刪除Cookie按鈕,在彈出的對話方塊中點選確定按鈕,即可成功刪除全部Cookie檔.
 
Session的概念

      Session 是儲存在伺服器端的類似HashTable結構(每一種web開發技術的實作可能不一樣,下文直接稱為HashTable)來存放使用者資料;

功能:

      實作網頁之間資料傳遞,是儲存在伺服器端的物件集合。

原則:

      當使用者要求一個Asp.net頁面時,系統會自動建立一個Session;退出應用程式或關閉伺服器時,該Session撤銷。系統在創建Session時將為其分配一個長長的字串標識,以實現對Session進行管理與追蹤。
      session機制是伺服器端的機制,而伺服器則使用類似散列表的結構(也可能就是使用散列表)來保存資訊。
      
儲存:

#

      儲存在Server段的記憶體進程中的,而這個進程相當不穩定,經常會重啟,這樣重啟的話,就會造成Session失效,用戶就必須要重新登錄,用戶體驗相當差,比如用戶在填寫資料,快要結束的時候Session失效,直接跳到登入頁面;

是否已經創建過session:

      當程式需要為某個客戶端的請求創建一個session時,伺服器先檢查這個客戶端的請求裡是否已包含了一個session標識(稱為session id),

      如果已包含則表示以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來....使用(檢索不到,會新建一個),
 
      如果客戶端請求不包含session id,為此客戶端創建一個session並且生成一個與此session相關聯的session id,

      session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字串,這個session id將被在本次回應中傳回給客戶端保存。

     (總結: 建立一個session時,伺服器看這個客戶端是否包含session標識, 是的話按照session id把session檢索出來,否則就得新建一個.)

Session的客戶端實作形式(即Session ID的保存方法):

     一般瀏覽器提供了兩種方式來保存,還有一種是程式設計師使用html隱藏域的方式自訂實現:

     [1] 使用Cookie來保存,這是最常見的方法,本文「記住我的登入狀態」功能的實作正式基於這種方式的。

     伺服器透過設定Cookie的方式將Session ID傳送至瀏覽器。
 
     如果我們不設定這個過期時間,那麼這個Cookie將不會存放在硬碟上,當瀏覽器關閉的時候,Cookie就消失了,這個Session ID就遺失了。

     如果我們設定這個時間為若干天之後,那麼這個Cookie會保存在客戶端硬碟中,即使瀏覽器關閉,這個值仍然存在,下次造訪對應網站時,同樣會發送到伺服器上。


     [2] 使用URL附加資訊的方式,也就是像我們常看到JSP網站會有aaa.jsp?JSESSIONID=*一樣的。這種方式跟第一種方式裡面不設定Cookie過期時間是一樣的。 (URL重寫,就是把session id直接附加在URL路徑的後面。)


#     [3] 第三種方式是在頁面表單裡面增加隱藏域,這種方式實際上和第二種方式一樣,只不過前者透過GET方式發送數據,後者使用POST方式發送數據。但是明顯後者比較麻煩。
     表單隱藏字段就是伺服器會自動修改表單,新增一個隱藏字段,以便在表單提交時能夠把session id傳回伺服器。例如:
     


        
        

      
      其實此技巧可以簡單的使用對action式應用網址來取代。

session 使用:

        使用者資料儲存至session前,先啟動;
                 $_SESSION['user'] ="zy";      設定使用者名稱
         unset($_SESSION['user']);    銷毀使用者名稱
    失去已經儲存的session的資料

cookie 與session 的差異:

       1、cookie資料存放在客戶的瀏覽器上,將session資料放在伺服器上.

       簡單的說,當你登入網站的時候,如果web伺服器端使用的是session,那麼所有的資料都儲存在伺服器上面,
       客戶端每次請求伺服器的時候會傳送目前的會話session_id,伺服器根據目前session_id判斷對應的使用者資料標誌,以決定使用者是否登入,或具有某種權限。
       由於資料是儲存在伺服器 上面,所以你不能偽造,但是如果你能夠取得某個登入使用者的session_id,用特殊的瀏覽器偽造該使用者的請求也是能夠成功的。
       session_id是服務 器和客戶端連結時候隨機分配的,一般來說是不會有重複,但如果有大量的並發請求,也不是沒有重複的可能性,我曾經就遇到過一次。
       登入某個網站,開始顯示的 是自己的訊息,等一段時間超時了,一刷新,居然顯示了別人的信息。

       Session是由應用程式伺服器維持的一個伺服器端的儲存空間,使用者在連接伺服器時,會由伺服器產生一個唯一的SessionID,用該SessionID 為識別碼來存取伺服器端的Session儲存空間。而SessionID這資料則是儲存到客戶端,用Cookie儲存的,使用者提交頁面時,會將這 SessionID提交到伺服器端,來存取Session資料。這一過程,是不用開發人員幹預的。所以一旦客戶端停用Cookie,那麼Session也會失效。

       2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙考慮到安全應當使用session。

       3、session會在一段時間內儲存於伺服器上。當訪問增多,會比較佔用你伺服器的效能考慮到減輕伺服器效能方面,應使用COOKIE。

       4、單一cookie儲存的資料不能超過4K,許多瀏覽器限制一個網站儲存最多20個cookie。 (Session物件沒有對儲存的資料量的限制,其中可以保存更為複雜的資料類型)

#注意:

      session很容易失效,使用者體驗很差;

      雖然cookie不安全,但是可以加密;

      cookie也分為永久和暫時存在的;

      瀏覽器有禁止cookie功能,但一般使用者都不會設定;

     必須設定失效時間,不然瀏覽器關機就消失了;

 例如:

      記住密碼功能就是使用永久cookie寫在客戶端電腦,下次登入時,自動將cookie訊息附加傳送給服務端。

      application是一種全域性訊息,是所有使用者分享的訊息,如可以記錄有多少使用者現在登入本網站,並且把訊息展現個所有使用者。

兩者最大的差別在於生存週期,一個是IE啟動到IE關閉.(瀏覽器頁面一關,session就消失了)
一個是預先設定的生存週期,或永久的保存於本地的文件。 (cookie)

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

nodejs連接mysql資料庫步驟詳解

給nodejs裡密碼加密有哪幾種方式

vue處理storejs取得的資料

以上是帶你了解session和cookie作用原理差異和用法(圖文教學)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python vs. JavaScript:開發環境和工具Python vs. JavaScript:開發環境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

JavaScript是用C編寫的嗎?檢查證據JavaScript是用C編寫的嗎?檢查證據Apr 25, 2025 am 12:15 AM

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具