首頁 後端開發 php教程 PHP會話控制:cookie和session差異與用法深入理解

PHP會話控制:cookie和session差異與用法深入理解

May 06, 2020 am 07:46 AM
cookie session

說到會話控制,大部人會想,那還不簡單嗎?不就是COOKIE和SESSION嗎?

的確就是cookie和session,但你真的會用嗎?

幾年前面試的時候我碰到了一個這樣的問題:

如何保證session在1小時後失效?

當時我想這個還不簡單,將gc_maxlifetime設定為3600不就行了。當時面試的人說,回答的不對,這樣不能保證1小時後一定會失效。當然他也沒跟我說原因。後來我回去後,仔細查找了一番,才搞清楚。

回答這個問題前,先普及下cookie和session的知識。

COOKIE與SESSION的差異與聯繫

#儲存位置的不同:

  • cookie存儲在客戶端

  • session存放在服務端

他們之間的聯繫:

當服務端開啟session後,即

session_start();
登入後複製

後,會產生一個唯一ID(session_id),並透過回應頭告訴客戶端。客戶端拿到後,會將它儲存在cookie中。當客戶端再次發起請求時,會帶著這個訊息。服務端收到這個資訊後,就會去存放session文件的目錄去找對應文件,找到後會去提取session資訊。就是透過這樣的機制,服務端辨識了客戶端的身份。

所以說,如果沒有cookie,session就沒有任何意義。

介紹完cookie與session的關係後,我們再來說session的有效期限。

SESSION的垃圾回收

一般php預設的session有效期限為24分鐘。客戶端在超過這個時間後一直沒有發出請求,就會有可能觸發垃圾回收機制,刪除過期的session檔案。為什麼說有可能?這就要說說垃圾機制的原理了。

php的session垃圾回收是有機率的,是由session.gc_probability和session.gc_diviso確定機率的。機率為

session.gc_probability/session.gc_diviso
登入後複製

php預設gc_probability是1,而gc_diviso預設為100,也就是說每次請求觸發垃圾回收的機率為1/100。一般的,當我們網站訪問量大的時候,可以將這個機率提高,例如1/1000,以減少io操作。

另外還有一點要說明:例如客戶端A,此時新建了一個session(session的有效期為10分鐘),過了8分鐘後,A又發送了請求。這時候他的session是2分鐘後到期,還是10分鐘後才到期?

答案是10分鐘後。因為第二次請求後,服務端的session檔案的修改時間也改變了。垃圾回收是看session檔案最後的修改時間。但大家再想想,對應的cookie有效期限是不是也會更新?很可惜,cookie有效期限不會更新。

如何保證1小時一定過期

現在,我們來看最初的問題,如何保證session檔案一個小時後一定過期。 session的垃圾回收是機率事件,所有不能指望他了。

那透過設定cookie的有效期了,透過設定cookie_lifetime可以做到麼?

答案還是不行。 cookie是在客戶端的,他沒有了,只是下次請求的時候不能帶這個cookie了,但對應的session檔還是存在的。

其實這個問題最簡單的做法,是將session保存在redis中,透過redis的鍵的過期時間來保證1個小時候,一定過期。方法也是推薦的方法

但只能用php的話,要怎麼來完成呢?

可以為每個session都設定一個時間戳,每次造訪前都會判斷時間戳。貼上程式碼:

<?php
session_start([
    &#39;cookie_lifetime&#39; => 3600,
    &#39;gc_maxlifetime&#39; => 3600
]);

if (isset($_SESSION[&#39;lifetime&#39;]) && $_SESSION[&#39;lifetime&#39;] > time()) {
    // 未过期,更新session的lifetime及cookie的有效期
    $_SESSION[&#39;lifetime&#39;] += 3600;
    $tmpVal = $_COOKIE[session_name()];
    setcookie(session_name(), $tmpVal, time() + 3600, &#39;/&#39;);
} else {
    // 过期删除
    $_SESSION = [];
    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), &#39;&#39;, time() - 100, &#39;/&#39;);
    }
    session_destroy();
}
登入後複製

透過閱讀了該內容,相信大家對php的會話應該有了更深的理解。

以上是PHP會話控制:cookie和session差異與用法深入理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
cookie存在哪裡 cookie存在哪裡 Dec 20, 2023 pm 03:07 PM

Cookie通常儲存在瀏覽器的Cookie資料夾中的,瀏覽器中的Cookie檔案通常以二進位或SQLite格式存儲,如果直接開啟Cookie文件,可能會看到一些亂碼或無法讀取的內容,因此最好使用瀏覽器提供的Cookie管理介面來檢視和管理Cookie。

電腦上的cookie在哪裡 電腦上的cookie在哪裡 Dec 22, 2023 pm 03:46 PM

電腦上的Cookie儲存在瀏覽器的特定位置,具體位置取決於使用的​​瀏覽器和作業系統:1、Google Chrome, 儲存在C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies中等等。

session失效怎麼解決 session失效怎麼解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由於 session 的生存時間過期或伺服器關閉導致的。其解決方法:1、延長session的生存時間;2、使用持久化儲存;3、使用cookie;4、非同步更新session;5、使用會話管理中介軟體。

PHP Session 跨域問題的解決方法 PHP Session 跨域問題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問題的解決方法在前後端分離的開發中,跨域請求已成為常態。在處理跨域問題時,我們通常會涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預設無法共享session。為了解決這個問題,我們需要採用一些技巧和方法來實現session的跨域共享。一、使用cookie跨域共享session最常

手機cookie在哪裡 手機cookie在哪裡 Dec 22, 2023 pm 03:40 PM

手機上的Cookie儲存在行動裝置的瀏覽器應用程式中:1、在iOS裝置上,Cookie儲存在Safari瀏覽器的Settings -> Safari -> Advanced -> Website Data中;2、在Android裝置上,Cookie儲存在Chrome瀏覽器的Settings -> Site settings -> Cookies中等等。

JavaScript和PHP的cookie之間有哪些差異? JavaScript和PHP的cookie之間有哪些差異? Sep 02, 2023 pm 12:29 PM

JavaScriptCookie使用JavaScriptcookie是記住和追蹤偏好、購買、佣金和其他資訊的最有效方法。更好的訪客體驗或網站統計所需的資訊。 PHPCookieCookie是儲存在客戶端電腦上的文字檔案並保留它們用於追蹤目的。 PHP透明地支援HTTPcookie。 JavaScriptcookie如何運作?您的伺服器將一些資料傳送到訪客的瀏覽器cookie的形式。瀏覽器可以接受cookie。如果存在,它將作為純文字記錄儲存在訪客的硬碟上。現在,當訪客到達網站上的另一個頁面時

Cookie工作原理是什麼 Cookie工作原理是什麼 Sep 20, 2023 pm 05:57 PM

Cookie運作方式涉及到伺服器發送Cookie、瀏覽器儲存Cookie以及瀏覽器對Cookie的處理和儲存。詳細介紹:1、伺服器發送Cookie,伺服器會傳送一個包含Cookie的HTTP回應標頭給瀏覽器。這個Cookie包含了一些訊息,例如使用者的身份認證、偏好設定或購物車內容等,瀏覽器接收到這個Cookie後,會將它儲存在使用者的電腦上;2、瀏覽器儲存Cookie等等。

cookie洩漏有什麼危害 cookie洩漏有什麼危害 Sep 20, 2023 pm 05:53 PM

Cookie洩漏的危害有導致個人識別資訊被竊、個人線上行為被追蹤、帳戶被竊等。詳細介紹:1、個人識別資訊被盜竊,例如姓名、電子郵件地址、電話號碼等,這些資訊可能被不法分子用於進行身份盜竊、欺詐等違法行為;2、個人在線行為被追踪,通過分析cookie中的數據,不法分子可以了解用戶的瀏覽歷史、購物偏好、興趣愛好等;3、帳戶被盜,繞過登入驗證,直接存取用戶的帳號等等。

See all articles