PHP系列(十三)PHP會話控制

php會話控制php

1、cookiewindows

1、會話控制之Cookie概述數組

cookie是在http協議下,服務器或腳本能夠維護客戶端信息的一種方式。瀏覽器

Cookie是一種由服務器發送給客戶端的片斷信息,存儲在客戶端瀏覽器的內存或者硬盤上。經常使用於保存用戶名,密碼,個性化設置,我的偏好記錄等。當用戶訪問服務器時,服務器能夠設置和訪問cookie的信息。緩存

cookie保存在客戶端,一般是IEFirefox瀏覽器的cookie臨時文件夾中,能夠手動刪除。注意:若是瀏覽器上cookie太多,超過了系統所容許範圍,瀏覽器也會自動對它進行刪除安全

 

2Cookie的操做服務器

設置Cookie微信

語法:bool setcookie(string name,[string value,[intexpire,[string path,[stringdomain,[intsecure]]]]]);cookie函數能夠有6個屬性,經常使用的有3個參數。cookie

//向客戶端發送一個Cookie,將變量username值爲skygao,保存客戶端一週的時間session

setcookie("username","skygao", time()+60*60*24*7);

//使用setCookie()函數的所有參數設置

setcookie("username","skygao", time()+60*60*24*7, "/test",".example.com", 1);

setcookie參數解釋

參數描述示例

name 名字調用名爲cookienamecookie

value 值假設第一個參爲cookiename,經過$_COOKIE[name’取得值]

exprice 有效時間設置cookie的過時時間和日期,用一個標準的Unix時間標記,能夠用time()函數取得,以秒爲單位.

path 範圍服務器端的有效路徑,設置爲「/」表示這個域中全部數組均可以被訪問讀取。

domain 域名設定cookie有效域名

secure 指明cookie只能經過安全的

https傳送設爲true時只能使用安全的https,默認爲false,即設置是否僅在https安全鏈接時才發送cookie到客戶端,01

讀取Cookie

若是Cookie設置成功,客戶端就擁有了Cookie文件,用來保存Web服務器爲其設置的用戶信息。

PHP中讀取Cookie信息很簡單,使用超全局數組

$_COOKIE[cookie’]便可獲取cookie中的內容。

<?php

//輸出Cookie中保存的全部用戶信息

print_r($_COOKIE);

3Cookie的數組形態應用

數組也能夠利用多維數組的形式,將多個內容值存儲在相同Cookie名稱標識符下。

<?php

setcookie("user[username]","skygao"); //$_COOKIE["user"]["username"]

setcookie("user[password]",md5("123456")); //$_COOKIE["user"]["password"]

setcookie("user[email]","skyga@lampbrother.net");//$_COOKIE["user"]["email"]

//遍歷$_COOKIE[user]數組

foreach($_COOKIE["user"]as $key => $value){

//輸出Cookie數組中二維的鍵值對

echo$key.":".$value."\n";

}

 

4、刪除Cookie

2種方式刪除Cookie

1.省略setcookie()函數的全部參數列

2.設置cookie爲已過時

<?php

//只指定Cookie識別名稱一個參數,即刪除客戶端中這個指定名稱的Cookie資料

setCookie("account"); //第一種方法

//設置Cookie 在當前時間過時,所以系統會自動刪除識別名稱爲isLoginCookie

setCookie("isLogin", "", time()-1); //第二種方法

 

2、session

1、會話控制session的工做機制

SessionCookie類似,都是用來儲存使用者的相關資料。但最大的不一樣之處在於Cookie是將數據存放在客戶端的計算機之中,而Session則是將數據存放於服務器系統之下。

cookiesessionphp中的使用區別:

cookiesession均可以暫時保存在多個頁面中使用的變量,可是它們有本質的差異。

cookie存放在客戶端瀏覽器中,

session保存在服務器上。

它們之間的聯繫是session ID 通常保存在cookie中,或者放在URL上。

禁用cookie的方法:

點擊IE中的「工具」—「Internet選項」,在彈出的對話框裏點擊「安全」—「自定義級別」項,將「容許每一個對話COOKIE」設爲禁用.

 

2session的應用

Session的聲明與使用

Session的設置不一樣於Cookie,必須先啓動,在PHP中必須調用session_start()

session_start()函數的語法格式以下

Bool session_start(void)

注意:session_start()函數以前不能有任何輸出

Session以數組的形式使用

如:$_SESSION[session名’]

session_start(); //啓動Session 的初始化

$_SESSION["username"]= "skygao"; //註冊Session 變量,賦值爲一用戶名稱

$_SESSION["uid"]= 1; //註冊Session 變量,賦值爲一個用戶的ID

 

註冊一個會話變量和讀取Session

PHP中使用Session變量,除了要啓動以外,還要通過註冊的過程。註冊和讀取Session變量,都要經過訪問$_SESSION數組完成。

$_SESSION關聯數組中的鍵名具備和PHP中普通變量相同的命名規則。

Session變量會被保存在服務器端的某個文件中,該文件的位置是經過php.ini文件,在session.save_path屬性指定的目錄下。

註銷變量與銷燬Session

1.bool session_destroy(void)

刪除服務器端保留session信息的文件

2.unset($_SESSION[‘鍵名’])

刪除內存中由Session數組保存的變量

清除全部變量可使用 $_SESSION=array()

3.若是session是基於Cookie的,那麼咱們還須要刪除客戶端保留的cookie文件

代碼1

<?php

//開啓會話session(cookie不用)

//session_start()前面不能有任何輸出這個函數向客戶端發一個session_id保存在cookie

// 還在服務器中建立一個和保存在客戶端同名的session文件(文本)

         session_start();

 

//使用$_SESSION這個數組

         $_SESSION['username']="jons";

         $_SESSION['age']=18;

         $_SESSION['sex']="nv";

         $_SESSION['lx']['email']="mz@aaa.com";

         $_SESSION['lx']['phone']='119';

 

         echo $_SESSION['username'];

代碼2

<?php

//開啓session

// 1. 判斷客戶端是否有了sessionid 變量名爲PHPSESSID, 直接使用這個session id開啓會話

// 也不新建立文件了,直接找這個同名session idsession文件

 

         session_start();

         echo '<br>';

         print_r($_SESSION);

         echo '<br>';

         echo '<br>';

         echo $_SESSION['username'];

 

代碼3

<?php

         //1開啓會話session  1

         session_start();

 

         //多餘的

         $username= $_SESSION['username'];

 

         //unset($_SESSION['username']);

         //2就能夠刪除數組中的全部內容, session對應的這個用戶文件的內容就空了

         $_SESSION= array();

 

         //刪除客戶中cookiesessionid

         if(isset($_COOKIE[session_name()])){

                   setCookie(session_name(),"", time()-3600, "/");

 

         }

         //4銷燬session

         session_destroy();

 

         echo"再見:{$username}";

 

3Session的配置選項

配置Session

php.ini文件和Session有關的幾個經常使用配置選項

session.auto_start = 0 ; 在請求啓動時初始化session

session.cache_expire= 180 ; 設置緩存中的會話文檔在 n 分鐘後過期

session.cookie_lifetime = 0 ;設置按秒記的cookie的保存時間,

至關於設置Session的過時時間,爲0時表示直到瀏覽器被重啓

session.auto_start=1,這樣就無需每次使用session以前都要調用session_start()。但啓用該選項也有一些限制,若是確實啓用了 session.auto_start,則不能將對象放入會話中,由於類定義必須在啓動會話以前加載以在會話中重建對象。

session.cookie_path = / ; cookie的有效路徑

session.cookie_domain = ; cookie的有效域

session.name =PHPSESSID用在cookie裏的session的名字

session.save_handler = files ; 用於保存/取回數據的控制方式

session.save_path= /tmp ; save_handler 設爲文件時傳給控制器的參數,這是數據文件將保存的路徑.

session.use_cookies = 1 ; 是否使用cookies

 

4Session的自動垃圾回收機制

php.ini中相關的配置

session.cookie_lifetime=0; 關閉瀏覽器相應的cookie文件即被刪除

session.gc_maxlifetime=1440;設置過時session時間,默認1440秒(24分鐘)

session.gc_probability/session.gc_divisor;啓動垃圾回收機制的機率(建議值爲1/10005000

代碼:

//開啓會話session(cookie不用)

//session_start()前面不能有任何輸出這個函數向客戶端發一個session_id保存在cookie

// 還在服務器中建立一個和保存在客戶端同名的session文件(文本)

// 調度PHP的機制使用session

 

         session_start();

 

//使用$_SESSION這個數組

 

         $_SESSION['username']="jons";

         $_SESSION['age']=18;

         $_SESSION['sex']="nv";

         $_SESSION['aaaaaaaa']="bbbbbbbbbbbbbbb";

         $_SESSION['lx']['email']="mz@aaa.com";

         $_SESSION['lx']['phone']='119';

 

         echosession_name()." = ".session_id()."<br>";

 

5、基於URL傳遞sessionid

爲啥要使用URLsession id

基於cookie的方式傳遞session id 這種方式更優。

但不老是可用,由於用戶在客戶端能夠屏蔽cokie;

什麼是基於urlsession id

是經過url參數進行傳遞

直接將session id嵌入到url中去

參數規則

Session_name()session_id()應用

常量SID的使用

URLsession id也是自動的

在使用Linux系統作服務器時,在編輯PHP時,打開—enable-trans-sid配置選項,和運行時選項session.use_trans_sid=1激活,在客戶端禁用cookie時,相對的url將被自動修改成包含sessionid, 若是沒有配置,或使用windows系統做爲服務器時,可使用常量SID.

建議使用Linux並配置好

<form action=」back.php<?php echo SID ?>」 method=」post」>

Name:<input type=」input」 name=」username」>

Pass:<input type=」password」 name=」pass」>

<input type=」submit」 name=」send」 value=」登陸」>

</form>

微信掃一掃 、關注公衆號

   不定時分享資料視頻

20191030160339365.jpg

相關文章
相關標籤/搜索