PHP技巧:關於cookie和session的分析

2020-12-20 站長之家

1. PHP的COOKIE

cookie 是一種在遠程瀏覽器端儲存數據並以此來跟蹤和識別用戶的機制。
PHP在http協議的頭信息裡發送cookie, 因此 setcookie() 函數必須在其它信息被輸出到瀏覽器前調用,這和對 header() 函數的限制類似。
1.1 設置cookie:
可以用 setcookie() 或 setrawcookie() 函數來設置 cookie。也可以通過向客戶端直接發送http頭來設置.
1.1.1 使用setcookie()函數設置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )
name: cookie變量名
value: cookie變量的值
expire: 有效期結束的時間,
path: 有效目錄,
domain: 有效域名,頂級域唯一
secure: 如果值為1,則cookie只能在https連接上有效,如果為默認值0,則http和https都可以.
例子:

以下為引用的內容:

<?php
value = 'something from somewhere';

setcookie("TestCookie", value); /* 簡單cookie設置 */
setcookie("TestCookie", value, time()+3600); /* 有效期1個小時 */
setcookie("TestCookie", value, time()+3600, "/~rasmus/", ".example.com", 1); /* 有效目錄 /~rasmus,有效域名example.com及其所有子域名 */
?>

設置多個cookie變量: setcookie('var[a]','value');用數組來表示變量,但他的下標不用引號.這樣就可以用_COOKIE[『var』][『a』]來讀取該COOKIE變量.

1.1.2. 使用header()設置cookie;
header("Set-Cookie: name=value[;path=path[;domain=xxx.com[;...]]");
後面的參數和上面列出setcookie函數的參數一樣.
比如:

以下為引用的內容:

value = 'something from somewhere';
header("Set-Cookie:name=value");

1.2 Cookie的讀取:

直接用php內置超級全局變量 _COOKIE就可以讀取瀏覽器端的cookie.
上面例子中設置了cookie"TestCookie",現在我們來讀取:

print _COOKIE['TestCookie'];

COOKIE是不是被輸出了?!

1.3 刪除cookie
只需把有效時間設為小於當前時間, 和把值設置為空.例如:
setcookie("name","",time()-1);
用header()類似.

1.4 常見問題解決:

1) 用setcookie()時有錯誤提示,可能是因為調用setcookie()前面有輸出或空格.也可能你的文檔使從其他字符集轉換過來,文檔後面可能帶有BOM籤名(就是在文件內容添加一些隱藏的BOM字符).解決的辦法就是使你的文檔不出現這種情況.還有通過使用ob_start()函數有也能處理一點.
2) _COOKIE受magic_quotes_gpc影響,可能自動轉義
3) 使用的時候,有必要測試用戶是否支持cookie
<!--[if !supportLineBreakNewLine]-->

1.5 cookie工作機理:

有些學習者比較衝動,沒心思把原理研究,所以我把它放後面.
a) 伺服器通過隨著響應發送一個http的Set-Cookie頭,在客戶機中設置一個cookie(多個cookie要多個頭).
b) 客戶端自動向伺服器端發送一個http的cookie頭,伺服器接收讀取.

以下為引用的內容:

HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.1
Set-Cookie: TestCookie=something from somewhere; path=/
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
Content-type: text/html

這一行實現了cookie功能,收到這行後
Set-Cookie: TestCookie=something from somewhere; path=/
瀏覽器將在客戶端的磁碟上創建一個cookie文件,並在裡面寫入:

以下為引用的內容:

TestCookie=something from somewhere;
/

這一行就是我們用setcookie('TestCookie','something from somewhere','/');的結果.也就是用header('Set-Cookie: TestCookie=something from somewhere; path=/');的結果.

2. PHP的Session

session使用過期時間設為0的cookie,並且將一個稱為session ID的唯一標識符(一長串字符串),在伺服器端同步生成一些session文件(可以自己定義session的保存類型),與用戶機關聯起來.web應用程式存貯與這些session相關的數據,並且讓數據隨著用戶在頁面之間傳遞.

訪問網站的來客會被分配一個唯一的標識符,即所謂的會話 ID。它要麼存放在客戶端的 cookie,要麼經由 URL 傳遞。

會話支持允許用戶註冊任意數目的變量並保留給各個請求使用。當來客訪問網站時,PHP 會自動(如果 session.auto_start 被設為 1)或在用戶請求時(由 session_start() 明確調用或 session_register() 暗中調用)檢查請求中是否發送了特定的會話 ID。如果是,則之前保存的環境就被重建。

2.1 sessionID的傳送

相關焦點

  • 跟我來學PHP5:session會話的使用和分析
    和GET,POST,COOKIE的使用方法相似。注意:session_register(),session_unregister,session_is_registered在php5下不再使用,除非在php.ini裡把register_globle設為on,不過出於安全考慮,強烈建議關閉register_globle。
  • php session 會話(專題)
    ,網絡中的用戶資料也會保存在二個地方:瀏覽器(客戶端)和伺服器中延伸知識:php中session和cookie的區別連結:https:PHP Session 要點變量過濾器: filter_input(INPUT_SESSION, key)設置使用專用函數: setcookie(名稱, 值, 過期時間)生效需要分二步完成: 先下達指令到瀏覽器
  • php中Session使用方法詳解
    >session的phpini配置選項  php.ini文件和Session有關的幾個常用配置選項:  session.auto_start = 0 ; 在請求啟動時初始化session  session.cache_expire = 180 ;
  • 關於Cookie與session會話技術的示例
    其實Cookie就是一個鍵和一個值構成的,隨著伺服器端的響應發送給客戶端瀏覽器。然後客戶端瀏覽器會把Cookie保存起來,當下一次再訪問伺服器時把Cookie再發送給伺服器。)。,當保存此cookie後 關於此項目的每次請求都會在請求頭攜帶cookie信息因為我們並沒有在代碼中設置cookie的保存時間,所以當瀏覽器關閉的時候cookie會自動清除
  • Cookie、Session、Token那點事兒
    本文重在科普分析Cookie、Session、Token的基本概念和應用場景;Okhttp框架下對Cookie的管理使用。文章如果寫的不好請各位開發者老司機私聊或者在評論區指點提出issue。1什麼是Cookie?
  • PHP-Session利用總結
    0x00 前言最近刷題碰到好幾個關於php代碼審計中session相關的問題,之前沒有做過系統的總結,在此補一下鍋。0x01 Session基礎知識這裡主要講講傳統的PHP中的「服務端Session」。
  • 面試題: 聊聊 session 和 cookie 的區別
    Cookie 使基於無狀態的 HTTP 協議記錄穩定的狀態信息成為了可能Cookie 主要用於以下幾個方面:瀏覽器行為跟蹤(如跟蹤分析用戶行為,淘寶的商品推薦)如何設置 Cookie客戶端設置document.cookie = "name=xiaoming; age=12 "
  • PHP禁止Cookie之後Session還能用嗎?
    打開設置->隱私設置和安全性->內容設置->Cookie->允許網站保存和讀取 Cookie 數據(推薦)關閉掉就行了。那麼我們禁用Cookie之後,有這麼幾種方式來實現。設置php.ini配置文件中的「session.use_trans_sid = 1」,或者編譯時打開打開了「--enable-trans-sid」選項,讓PHP自動跨頁傳遞Session ID。
  • session和cookie魅力所在
    實現Web應用的技術核心http協議是一個無狀態的協,為了讓Web應用開發保持狀態,就出現了保持http連結的狀態的兩種技術:一個是cookie技術,另一個是session技術。cookie和session都是保存狀態的方法,其主要差異在cookie用在客戶端保存,session是在服務端保存,但是服務端的session的實現對客戶端的cookie是有依賴關係的,前面說的那個session id就是保存的容器就是客戶端的cookie。如果瀏覽器禁用了cookie,絕大多數情況下cookie也是不可用的。
  • 會話技術 Cookie和Session
    不以"/"開頭就是相對路徑(路徑必須正確) 二、轉發和重定向的細節 1、轉發:只能轉發到本應用的其他資源 2、請求重定向:可以轉發到任何地址。保存在ServletContext和ServletRequest的域對象中是不可取的。
  • 一篇理解cookie、session、localStorage和sessionStorage
    試題6: 在chrome上登陸的cookie,safari會帶上cookie嗎?解決上面6個問題,首先要依此了解cookie、session、localStorage和sessionStorage的各個用法:1. Cookie是伺服器發送到用戶瀏覽器並保存在本地的一小塊數據。2.
  • Springboot中登錄後關於cookie和session攔截案例
    2、每次登錄的時候都要進資料庫校驗下帳戶名和密碼,只是加了cookie 或session驗證後;比如登錄頁面A,登錄成功後進入頁面B,若此時cookie過期,在頁面B中新的請求url到頁面c,系統會讓它回到初始的登錄頁面。(類似單點登錄sso(single sign on))。
  • 淺談Cookie與Session技術
    會話:當用戶打開瀏覽器,訪問多個WEB資源,然後關閉瀏覽器的過程,稱之為一個會話,選項卡,彈出頁面都屬於這個會話,且共享同一個session。注意:具體會話和瀏覽器版本,廠商有關,如IE7及以下,每開一個瀏覽器都創建一個新的session,而IE8及以上,則實現多個瀏覽器共享同一個session。
  • 原理+實踐掌握(PHP反序列化和Session反序列化)
    0x05:session反序列化攻擊先來了解一下關於session的一些基礎知識什麼是session在計算機中,尤其是在網絡應用中,稱為「會話控制」。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程式的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。
  • cookie和session原來還有這樣的關係
    就是說,在沒有cookie之前,你第一次訪問這個頁面和第二次訪問這個頁面,伺服器是不知道的,不知道前一次是你。那麼問題來了,我怎麼登錄,登錄成功後,刷新下,伺服器就不認識我了,不展示我的信息了,這怎麼能行,於是cookie就產生了,cookie是存在客戶端的,最常見的就是瀏覽器了,你第一次訪問頁面的時候,伺服器會返回個cookie給你,這個cookie其實就是sessionId,並存於客戶端,第二次的時候,你刷新頁面的時候,瀏覽器就會帶上之前的cookie,cookie就像通行證,每人一個,無論誰訪問都必須攜帶自己通行證
  • session與cookie引發的一個小故事
    首先加載頁面時去得到驗證碼,後臺將驗證碼數字存入到session中,然後在登陸時把前端傳入的驗證碼數字同後臺取出的碼進行比較,比較之前首先把原來的session移除掉。若相同則驗證通過,不同則驗證不通過然後重新請求。這個流程本來是沒有什麼問題的,然而自己突然想到這裡會不會有點問題呢?session在並發時會不會出現覆蓋的情況呢?然後就動手開始測試。
  • 淺談cookie,sessionStorage,localStorage
    ('user')優點,缺點和瀏覽器支持和 Local Storage 一樣sessionStorage、localStorage、cookie都是在瀏覽器端存儲的數據,其中sessionStorage的概念很特別
  • Cookie, Session, Token,WebStorage你懂多少?
    只有一小部分同學能答出來要用cookie和session.再問,有了cookie為什麼還要session?更少一部分人能答出來安全。再問,不要cookie行不行?能答出URL重寫的已經不錯了。對於高級的測試,再繼續深入,session保存在伺服器內存中,隨著用戶的增多,伺服器撐不住了怎麼辦?假設我使用了集群服務怎麼辦?
  • [接口測試_B] 09 requests中Cookie和會話對象session處理
    要知道為什麼會有cookie和session,需要先理解http的特點:http協議是無狀態的協議。因此,cookie和session存在的作用是進行狀態管理。Cookie和Session的簡單理解我從哪裡來,我在哪裡,我到哪裡去Cookie是由服務端生成,存儲在響應頭中,返回給客戶端,客戶端會將cookie
  • session原理終極版-一文弄懂session會話與cookie 秒殺CSDN
    Session本質和實現原理是怎麼樣的?首先我們來看一下瀏覽器保存的cookie長什麼樣子。通過任意抓包工具,抓取一個需要登錄的網站的cookie,如下圖:session有兩種傳遞方式:第一種通過cookies實現。第二種通過URL重寫來實現。我們先來說說第一種,也是應用最廣泛的。當你第一次訪問當前網站的時候,一個session就被第一次啟用,一個唯一標誌被存儲在本地的cookie中。