核心編程筆記 cookie session

會話技術

由於HTTP協議是無連接無狀態的,所以HTTP協議無法記住客戶端的信息,爲了彌補HTTP協議這兩點的“不足”,所以出現了會話技術

cookie技術

1.什麼是cookie

服務器端,將能夠唯一標示用戶的數據保存客戶端的一種方式。之後瀏覽器在每次請求時都會自動攜帶給服務器

2.cookie的工作原理

3.設置cookie

(1). 設置cookie

setcookie(name,value,expire,path,domain,httponly,secure)

參數 說明
name cookie名
value cookie值
expire 過期時間,以秒爲單位,以時間原點爲起點(1970年1月1日)
path cookie在瀏覽器端顯示的路徑
domain
secure true或false
httponly true或false

位於客戶端的cookie的本質就是文本文件
==圖片1==

(2). cookie的有效時間

setcookie(name,value,expire);

expire是用於設置cookie的過期時間,時間是以秒記錄的,有效期的起點是時間原點

如果省略表示會話cookie,有效期到瀏覽器關閉。

==圖片3==

(3). cookie的路徑

首先明確:PHP有自己位於服務器上的路徑

cookie也有自己的路徑

默認如果在設置cookie時沒有設置參數,那麼cookie的路徑默認就是PHP文件的路徑


setcookie(name,value,expire,path);

path  也有設置cookie在瀏覽器顯示的路徑

如果客戶端的cookie顯示路徑是所請求的PHP文件路徑的父路徑則會攜帶過去,但是絕大多數情況我們是將一個cookie設置爲整站有效
==圖片4==

(4). cookie的域

理解域名: 說明
頂級域名 主要是標示國家
- .cn  .us  .jp
一級域名 主要是標識行業
.com 商業機構
.gov 政府機構
.org 非盈利組織
.edu 教育機構
.net 網絡機構
.mil 軍事機構
二級域名 主要用於標識公司
baidu qq 163

cookie所實現的跨域,只能是二級域名相同
==圖片5==

(5). secure

setcookie(name,value,expire,path,domain,secure);

secure取值爲true或false

如果設置爲true,那麼只要當客戶端使用的協議是HTTPS時,纔會會將cookie攜帶給服務器端。

https(更安全)=http+ssl

(6). httponly

setcookie(name,value,expire,path,domain,secure,httponly);

httponly取值爲true或false

如果設置爲true,那麼只能由PHP訪問cookie,js不能訪問

4.讀取cookie

$_COOKIE  就是一個關聯數組,主要是用於存儲用戶端通過cookie的技術,提交的數據
==圖片2==

5.刪除cookie

方法1:再設置一次cookie,有效期設置爲過期時間

setcookie('name','air jordan',time()-1);

方法2:將cookie的值設置爲字符空

setcookie('name','');

6.關於cookie值的類型

由於cookie的值最終是保存在客戶端的文本文件中,由於文本文件中只能存儲字符,所以cookie不能存儲數組。

如果想存儲數組,可以使用變通的方式

$arr=['PG'=>'irving','SG'=>'T-mac','SF'=>'Lebron','PF'=>'Yi','C'=>'Yao'];
setcookie('PG',$arr['PG']);
setcookie('SG',$arr['SG']);
setcookie('SF',$arr['SF']);
setcookie('PF',$arr['PF']);
setcookie('C',$arr['C']);
echo '<pre>';
print_r($_COOKIE);

session技術

1.什麼是session技術

session也是會話技術中的一種,session是以cookie爲基礎,將重要的數據保存在服務器端,同時將能夠唯一標識這份數據的數據以cookie保存客戶端

2.session原理

==圖片6==

3.開啓session

session_start();
用於開啓session機制。同時激活$_SESSION預定義變量

4.session操作——設置session

session的操作就是向SESSION<br>_SESSION這個變量中寫數據,或讀數據<br> 當向內存中的_SESSION變量中寫數據時,$_SESSION變量中數據最終會保存到硬盤的一個文本文件中

5.session操作——讀取session

當我們從$_SESSION變量中讀取數據時,其實就是將硬盤那個session文件中的數據提取到內存中
==圖片7==

**理解:SESSIONsession<BR><BR>cookie<BR>PHP_SESSION與session文件之間交互的過程**<BR> 首次:<BR> 請求時,服務器首先在硬盤中創建一個唯一的文件,將文件名以cookie的形式返回客戶端<BR> 在PHP腳本執行結束時,將_SESSION內存變量中的數據寫入到session文件中

其後各次:

請求時,服務器會收到客戶端的cookie中保存的session文件名,同時會在硬盤中找到對應的session文件。

然後打開這個session文件,將文件中的數據讀取到$_SESSION變量

6.session操作——獲取session ID

session_id();

用於獲取當前session id值

7.session數據

session可以存儲任何類型的數據,但是$_SESSION變量本身的下標必須是字符串
==圖片8==

8.銷燬session

函數 說明
session_destroy(); 銷燬session文件
unset($_SESSION[下標]); 銷燬session中部分文件
session_start();

$userinfo=['id'=>34,'u_name'=>'admin','u_pwd'=>'123'];
$_SESSION['id']=$userinfo['id'];
$_SESSION['u_name']=$userinfo['u_name'];
$_SESSION['u_pwd']=$userinfo['u_pwd'];

unset($_SESSION['u_name']);

echo '<pre>';
print_r($_SESSION);

9.session配置(在文件php.ini中)

(1).用於設置保存session數據的介質,是文件還是數據庫(一般用文件)

==圖片9==

(2).用於設置包岑sessionid的那個cookie的有效期

==圖片10==

(3).設置cookie位於瀏覽器端的顯示路徑

==圖片11==

(4).設置保存sessionid的那個cookie的域

==圖片12==

(5).設置保存sessionid的那個cookie是否允許PHP文件訪問

==圖片13==

(6).設置保存sessionid的那個cookie是否只允許https協議傳遞

==圖片14==

(7).設置session文件的保存位置

==圖片15==

(8).設置保存sessionid的那個cookie的名

==圖片16==

(9).設置是否使用cookie保存sessionid

==圖片17==

(10).設置是否使用cookie保存sessionid

==圖片18==

(11).自動開啓session

==圖片24==
設置爲自動後,就不用寫入session_start();

10.session文件分目錄存儲

當項目很大時,會產生數量非常多的session文件,爲了能夠加快session文件的查詢速度,我們可以採用分目錄存儲session文件
==圖片19==
1;e:/tmp   表示在e:/tmp目錄下需要創建a-z,0-9位文件夾名的文件夾36個。

2;e:/tmp   表示在e:/tmp目錄下需要創建a-z,0-9位文件夾名的文件夾36個,然後在個文件夾再創建36個文件夾。

11.session垃圾回收機制

session文件可以設置一個有效期。默認(24分鐘)設置如下圖:
==圖片20==
垃圾:PHP會認爲過期的session是一個垃圾文件,所以需要刪除,刪除這樣的過期session文件有一個機制,就是session垃圾回收機制
==圖片21==

12.cookie是瀏覽器的一個功能,可以被禁止,若被禁止,如何實現session?

(1).設置不僅僅使用cookie保存session

==圖片22==

(2).設置可以使用transid保存session數據

==圖片23==

(3).設置完後形成過程

PHP在啓動的過程中會檢測到session.use_strans_sid=1,當客戶端請求了某個PHP文件是,session機制會自動查找當前PHP文件中是否有a鏈接,如果有就在url後加?PHPSESSION=當前的sessionid值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章