搜尋
首頁後端開發php教程PHP版本--HTTP session cookie原理及應用

PHP 的COOKIE

    cookie 是一種在遠端瀏覽器端儲存資料並以此來追蹤和識別使用者的機制。 
    PHP在http 協定的頭資訊裡傳送cookie,因此  setcookie()函數必須在其它資訊被輸出到瀏覽器前調用,這和對header()函數的限制類似。

------------------------------------------ -------------------------------------------------- ----------------------------------

    1.設定cookie:

    a .可以用setcookie()或setrawcookie()函式來設定cookie。也可以透過直接向客戶端發送http頭來設定。

    

Php代碼 PHP版本--HTTP session cookie原理及應用

'something from somewhere'
    ;  
  1. setcookie( "TestCookie"$value
  2. ); 
  3. /* 簡單 cookie設定 */  $value, time( )+3600); /* 有效期限 1小時 */   
  4. setcookie( time()+3600, "/ ~rasmus/",  ".example.com", 1); 🠎    
  5.     設定多個cookie  變數:setcookie('var[a]','value');這樣就可以用$_COOKIE[‘var’][‘a’]來讀取該COOKIE 變數。      b. 使用header()設定cookie;
  6. :$ 但 .com[ ;...]]");     eg:
Php 

Php 'something from somewhere'

;   

header(

"Set-Cookie:name=$value"

);  

-------------------------------------------------- -------------------------------------------------- -------------

    2.讀取cookie:PHP版本--HTTP session cookie原理及應用

    直接使用php  內建超級變數$_COOKIE 就可以讀取瀏覽器端的cookie。 
  1.     上述範例設定了cookie "TestCookie",現在我們來讀:  
    1. print $_COOKIE['TestCookie'];  ---------------- -------------------------------------------------- -------------------------------------------------- --------

        3.刪除cookie

         只要將有效時間設定為小於當前時間,且將有效時間設定為小於目前時間。例如:     eg:

    Php代碼 

    ookie

    PHP版本--HTTP session cookie原理及應用""

    , time()-1);  
    1.      以header()類似。       note:
         a.

    setcookiep(3)時有錯誤提示,也可能你的文件是從其他字符集轉  換過來,文件後面可能帶有 BOM 簽章(就是在文件內容中加入一些隱藏的BOM 字元)。解決的辦法就是使你的文件不出現這種情況。還有透過使用ob_start()函數 也能處理一點。

         b.$_COOKIE 受magic_quotes_gpc 影響,可能自動轉義

    - -------------------------------------------------- -------------------------------------------------- -------------------------

         4.原理.

         a.伺服器透過隨著回應傳送一個http 的Set-Cookie 頭,在客戶機中設定一個cookie(多個cookie 要多個頭)。 

         b.並在客戶端自動傳送一個http 的cookie 頭,伺服器接收讀取。           HTTP/1.x 200 OK           X-Powered-By: PHP/           Expires: Thu, 19 Nov 2007 18:52:00 GMT           Cache -Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0           Pragma: no-cache 

     一行實作了cookie 功能,收到這行後

        Set-Cookie: TestCookie=something from somewhere; path=/ 

        瀏覽器將在客戶端的磁碟上建立一個cookie,並在內部寫入: from somewhere;     這一行就是我們用setcookie('TestCookie','something   from  somewhere','/'); 的結果。也就是用     header('Set-Cookie: TestCookie=something from somewhere; path=/');的結果。

     





    ---------------------------------------- ---------分線------------------------------------------------- -----------------------------

     


    PHP 的SESSION

    PHP 的SESSION

    PHP 的SESSION

    session 使用過期時間設為0 的cookie,並且將一個稱為session ID 的唯一識別碼(一長串字串),在伺服器端同步產生一些 session 檔案(可以自己定義 session 的保存類型),與用戶機關聯起來。 web應用程式存貯與這些 session 相關的數據,並且讓數據隨著用戶在頁面之間傳遞.訪問網站的來客會被分配一個唯一的標識符,即所謂的 SESSION ID。它要麼存放在客戶端的cookie,要麼經由  URL  傳遞.SESSION 允許使用者註冊任意數目的變數並保留給各個請求使用。當來客造訪網站時,PHP會自動(如果session.auto_start 被設為1)或在使用者要求時(由session_start()明確呼叫或session_register() 暗中呼叫)檢查請求中是否傳送了特定的SESSION ID。如果是,則先前儲存的環境就被重建。

    session最最核心的概念就是:網頁間跳轉的額外數據,保存在伺服器,用一個id標識,瀏覽器要維持session,需要每次提交都帶上這個id.

    --------------------------------------------- -------------------------------------------------- -------------------------------

    session id的傳遞有兩種方式:

    a. 透過cookie 傳送SESSION ID

    使用session_start()呼叫session,伺服器端在產生session 檔案的同時,產生session ID 哈希值和預設值為PHPSESSID 的session name,並向客戶端發送變數為(預設的是)PHPSESSID(session name),值為一個 128 位元的哈希值。伺服器端將透過該 cookie 與客戶端進行互動。 session 變數的值經php內部序列化後保存在伺服器機器上的文字檔案中,和客戶端的變數名稱預設為PHPSESSID 的coolie 進行對應互動.即伺服器自動傳送了http  頭:header('Set-Cookie :  session_name()=session_id();  path=/'); 即setcookie(session_name(),session_id()); 
    當從該頁跳到的新頁面並呼叫session_start()後,PHP 將檢查與給定ID 相關聯的伺服器端存貯的session 數據,如果沒找到,就新建一個數據集。

    b.透過URL傳送session ID

    只有在使用者中可禁止使用通用cookie 的時候
    只有在使用者可以禁止使用通用cookie 的時候

    ,因為瀏覽器該方法。 

        xxx,也可以透過POST 傳遞 session 值。

    ------------------------------------------ -------------------------------------------------- ----------------------------------


    如果客戶端禁止使用cookie,可以使用如下方法:

    a、設定php.ini中的session.use_trans_sid = 1或編譯時開啟開啟了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。 b、手動透過URL傳值、隱藏表單傳遞session id。 c、以檔案、資料庫等形式保存session_id,在跨頁過程中手動呼叫。

    link:http://apps.hi.baidu.com/share/detail/41643457


     

    session也可以在禁用cookiesion. =1,改為0,session會保存在伺服器端,而不是客戶端的cookie。

    可以透過session.save_path來查看伺服器的session存放位置

    session的使用:

    eg:com

    1. // page1.php   
    2.     echo
    3.  
    4. 'Welcome to page #1';       /* 建立 session變數並給予 session變數值 */
    5.    
    6. $_SESSION['favcolor'
    7. ] = 
    8. 'green' ;   
    9.     $_SESSION🎠     $_SESSION[
    10. 'time '] = time();       // 若客戶端使用    echo 
    11. 'page 2';         
    12. echo
    13.  '
       . SID . 
      '">page 2'; 
      /*
    14.  
    15.     默認php5.2.1下,SID只有在 cookie被寫入的同時才會有值,如果該 session   SID將為 (未定義)空  
    16.     */      
    17.     hp代碼 // page2.php   
    18.     session_start();  
    19.     print 出單 session   
    20.     var_dump($ _SESSION
    21. ); // 印出page1.php傳過來的 session值   

    刪除session:

    PHP版本--HTTP session cookie原理及應用

    1. eg:
    2. Php程式碼  / 第一步: 刪除伺服器端 session檔案,這使用 
    3.    setcookie(session_name(),'',time()-3600);         
    4. $_SESSION  = array();     // 第三步驟: 刪除$_SESSION3
    5.  

       

      -------------------------------------------------- -------------------------------------------------- --一個簡單的範例:

      php code:

      Php 

        PHP版本--HTTP session cookie原理及應用

      1. if (isset($_SESSION[
      2. 'test_sess'
      3.     $_SESSION['test_sess ']++;    
      4.  
      5.     $_SESSION['test_sess' ] = 0;  
      6.   
      7. echo $_SESSION
      8. ['test_sess' ];   
      9. 使用的一個叫做httplook的http包嗅探工具來抓包
      10. 第一次請求伺服器:
      11. GET /test.php HTTP/1.1 Accept: */* Referer: http: User-Agent : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322) Host: localConnection 伺服器第一次回:

      HTTP/1.1 200 OK Date: Fri, 26 2) SVN/1.2.1 PHP/ 5.0.4 DAV/2 X-Powered-By: PHP/5.0.4 

      Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/ 

      3mfc94ncdr15ujitjogma3; path Cache-Control: no -store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 1 Keep-Alive:ConnectionConnectionout=195, -Alive 

      Content-Type: text/html; charset=utf-8 

      Content-Language: Off

       次請求 



      GET /test.php HTTP/1.1 
      Accept: */* 
      Referer: http://localhost/ 
      Accept-Language: zh-cn Accept-Ancom:7):comm/Sdefilla/defillar.com MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322) 
      Host: localhost 
      ): Keep-Alive 
      Cookie:530mfcm>

       

      伺服器第二次回:

      HTTP/1.1 200 OK 
      Date: Fri, 26 Aug 2005 07:44:23 GMT Server: AV/2 
      X- Powered-By: PHP/5.0.4 
      Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/ 
      Expires: Thu, 1915ujitjogma3; path=/ 
      Expires: Thu, 1900:Nov 198:0185 cache, must- revalidate, post-check=0, pre-check=0 
      Pragma: no-cache 
      Content-Length: 1 
      Keep-Alive: timeout=15, max=98 
      Keep-Alive: timeout=15, max=98 
      Keep-Alive: timeout=15, max=98 
      Keep-Alive: timeout=15, max=98 
      html; charset=utf-8 
      Content-Language: Off

       



      這個header會向伺服器發送一個cookie訊息,告訴伺服器我有一個cookie,名字叫PHPSESSID,內容是bmmc3mfc94ncdr15ujitjogma3。 
      這個cookie是怎麼來的呢?看第一次伺服器回傳的訊息裡邊有: 
      Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/ 
      這是伺服器向客戶端瀏覽器寫一個cookie,名字是PHPSESSID,值是bmmc3mfc94dr15 session_id。
      繼續看第二次向伺服器發出的請求,仍然向伺服器發送了PHPSESSID這個cookie 
      可以得到以下結論: 
      1、只要使用了session,就會透過cookie的方式向客戶端瀏覽器發送session 
      2、每次向伺服器發出請求的時候,本地瀏覽器會把cookie附帶在請求資訊中

       

      總結:

      只要使用了session,只要使用cookiesion,就會透過cookie的方式向客戶端瀏覽器發送session 
      實際上session完全是一個抽象的概念,session真正要做的,是在除了http提供的get和post提供的參數之外,針對某個用戶(可能是個瀏覽器,或是台電腦,甚至是個ip),能保存額外的資訊。如果我們不用系統提供的session,完全也可以傳遞數據,例如把我們原本要存入session的數據,序列化後再加密,形成一個字串,在頁面上所有的url和form裡傳遞。伺服器收到頁面請求後,從get或post裡取出機密串,揭開,還原數據,實際上和session要做的東西一個樣。只不過這種方式超級bt,要實現需要做太多額外的工作。
      session從技術角度講,就是把在網頁連結之間,額外要儲存的數據,用一個id命名,保存在伺服器端,而瀏覽器只需要每次get或post的適合,只提供這個id,就能獲得之前儲存的資料。 php預設是用檔案來保存資料的。 unix下,php通常會在/tmp下面,建立 "sess_"+$session_id 這樣的檔名,透過這個名字,就能直接找到session_id對應的資料。 所以session最最核心的概念就是:網頁間跳轉的額外數據,保存在伺服器,用一個id標識,瀏覽器要維持session,需要每次提交都帶上這個id。 
      怎麼能讓瀏覽器每次請求都能帶上這個id呢,笨辦法當然是在每個url連結或form的post裡都加個id的參數,有些webmail其實就是這麼做的。當然更簡單的辦法就是透過cookie來儲存。但cookie方案還有個問題,如果瀏覽器不支援cookie怎麼辦,上面也有陳述.
      上述的session,是php4,5提供的session功能,要知道php4之前系統都沒有提供session功能!而且很多cgi程序,都是完全自己實現的session。 php(4,5)提供的session,系統預設會用cookie來保存session_id 
      我之前一個項目,使用者都在內網使用web。為了方便管理,直接把瀏覽器ip綁死到一個session,就是用瀏覽器ip位址取代了sessionid。這個方案裡沒有cookie,但還算是session,應為他沒脫出session的定義。

       

      每次向伺服器發出請求的時候,本地瀏覽器會把cookie附帶在請求訊息中 
      實際上和session完全沒有關係,說的只是http協議裡cookie的工作方式。這個cookie是session_start()函數寫的,我們也完全可以自己任意寫cookie,只要寫了,而且沒超過有效期,瀏覽器都能送。

      以上就介紹了PHP版本--HTTP session cookie原理及應用,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

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

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

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),