php筆記之 cookie與session

2022-03-22 11:39:01 字數 2708 閱讀 9082

cookie將資料儲存在客戶端,建立起使用者與伺服器之間的聯絡,通常可以解決很多問題,但是cookie仍然具有一些侷限:

cookie相對不是太安全,容易被盜用導致cookie欺騙

單個cookie的值最大只能儲存4k

每次請求都要進行網路傳輸,占用頻寬

session是將使用者的會話資料儲存在服務端,沒有大小限制,通過乙個session_id進行使用者識別,php預設情況下session id是通過cookie來儲存的,因此從某種程度上來說,seesion依賴於cookie。但這不是絕對的,session id也可以通過引數來實現,只要能將session id傳遞到服務端進行識別的機制都可以使用session。

下面我們就先介紹cookie吧:

cookie是儲存在客戶端瀏覽器中的資料,我們通過cookie來跟蹤與儲存使用者資料。一般情況下,cookie通過http headers從服務端返回到客戶端。多數web程式都支援cookie的操作,因為cookie是存在於http的標頭之中,所以必須在其他資訊輸出以前進行設定,類似於header函式的使用限制。

php通過setcookie函式進行cookie的設定,任何從瀏覽器發回的cookie,php都會自動的將他儲存在$_cookie的全域性變數之中,因此我們可以通過$_cookie['key']的形式來讀取某個cookie值。

php設定cookie最常用的方法就是使用setcookie函式,setcookie具有7個可選引數,我們常用到的為前5個:

name( cookie名)可以通過$_cookie['name'] 進行訪問

value(cookie的值)

expire(過期時間)unix時間戳格式,預設為0,表示瀏覽器關閉即失效

path(有效路徑)如果路徑設定為'/',則整個**都有效

domain(有效域)預設整個網域名稱都有效,如果設定了'www.imooc.com',則只在www子域中有效

$value = 'test';

setcookie("testcookie", $value);

setcookie("testcookie", $value, time()+3600); //有效期一小時

setcookie("testcookie", $value, time()+3600, "/path/", "imooc.com"); //設定路徑與域

php中還有乙個設定cookie的函式setrawcookie,setrawcookie跟setcookie基本一樣,唯一的不同就是value值不會自動的進行urlencode,因此在需要的時候要手動的進行urlencode。

setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
因為cookie是通過http標頭進行設定的,所以也可以直接使用header方法進行設定。

header("set-cookie:cookie_name=value");

刪除cookie的方法和設定類似

setcookie('test','',time()-1);

cookie中的路徑用來控制設定的cookie在哪個路徑下有效,預設為'/',在所有路徑下都有,當設定了其他路徑之後,則只在設定的路徑以及子路徑下有效,例如:

setcookie('test', time(), 0, '/path');
上面的設定會使test在/path以及子路徑/path/abc下都有效,但是在根目錄下就讀取不到test的cookie值。

在php中使用session非常簡單,先執行session_start方法開啟session,然後通過全域性變數$_session進行session的讀寫。

session_start();

$_session['test'] = time();

var_dump($_session);

session會自動的對要設定的值進行encode與decode,因此session可以支援任意資料型別,包括資料與物件等。

session_start();

$_session['ary'] = array('name' => 'jobs');

$_session['obj'] = new stdclass();

var_dump($_session);

刪除某個session值可以使用php的unset函式,刪除後就會從全域性變數$_session中去除,無法訪問。

session_start();

$_session['name'] = 'jobs';

unset($_session['name']);

echo $_session['name']; //提示name不存在

如果要刪除所有的session,可以使用session_destroy函式銷毀當前session,session_destroy會刪除所有資料,但是session_id仍然存在。

session_start();

$_session['name'] = 'jobs';

$_session['time'] = time();

session_destroy();

值得注意的是,session_destroy並不會立即的銷毀全域性變數$_session中的值,只有當下次再訪問的時候,$_session才為空,因此如果需要立即銷毀$_session,可以使用unset函式。

PHP客戶端禁用cookie如何使用session

第一種方式 在每個超連結上新增乙個phpsessid sid 防止返回初始頁產生新的session if isset get phpsessid 啟動乙個session session start 獲取當前session的session id sid session id 在每個鏈結上新增引數php...

php學習筆記之登入後有儲存Cookie免登入

先寫乙個主頁面 charset utf 8 主頁title head if isset cookie user isset cookie user 檢測是否登入過 即是否設定過cookie else 沒有設定過請先登入 body html 登入頁面 charset utf 8 登入title err...

正確理解web互動中的cookie與session

cookie儲存在客戶端的純文字檔案 使用者請求伺服器指令碼 指令碼設定cookie內容 並 通過http response傳送cookie內容到客戶端並儲存在客戶端本地 客戶端再次傳送http請求的時候會將本地的cookie內容新增到http請求頭髮送給伺服器,伺服器端指令碼可以呼叫cookie內...