PHP中的會話管理

PHP中的會話控制 COOKIE

  1. httP特點:無連接無狀態
  2. Cookie: 保存在客戶端中的

內存cookie---有瀏覽器來維護,保存在內存中,瀏覽器關閉後就消失 ,存在時間是有限的

硬盤cookie()保存在硬盤中,有一個過期時間,也可以手動清除瀏覽器數據,否則營辦cookie不會被刪除,存在時間是長期的

Cookie使用場景一般在服務器端設置 可以用在永久登陸、購物車

操作cookie 設置、讀取、更新、刪除cookie

  1. 設置cookie  setcookie()/setrawcookie()

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = ""[, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

$name設置cookie名稱

$value 設置cookie值 默認爲空

$expire 設置cookie過期時間 默認爲0s 

$path       設置cookie有效路徑,默認爲當前目錄及其子目錄,也可以指定爲根目錄及其子目錄

$domin    設置cookie的作用域 默認爲本域

$secure 設置cookie只能通過HTTPs傳輸 默認爲false

$httponly        是否只是用http訪問cookie 默認爲false 如果設置爲true,那麼客戶端就無法使用js操作cookie ,可以減少Xss攻擊

  1. 讀取Cookie     

$_Cookie

  1. setrawcookie 用法和setcookie一樣 但是不會對發送的值做urlencode編碼 主要是針對加號和空格的編碼
  2. 更新cookie 重新寫一個setcookie 但是要保證修改前後的$path和$domian保持一致 否則會變爲添加一個新cookie
  3. 刪除cookie 只要讓cookie過期就可以 但是和更新cookie一樣需要保證$path和$domain 一致
  4. 通過header方法來設置cookie

Header(“Set-Cookie:name=value[;expires=date][;path=path][;domain=domain][;secure][;httponly]”)

Expires:gmdate(“D,d M Y H:i:s”,time()+3600);

Strtotime(‘+7 days’) 把字符轉爲UNIX時間戳

  1. cookie中存數組

Setcookie(‘userinfo[username]’,’111’,strtotime(‘+1 hour’));

Setcookie(‘userinfo[pwd]’,’222’.strtotime(‘+1 hour’));

  1. 通過js可以操作cookie
  2. Explode字符數組使用一個字符分割一個數組

Implode(‘字符,數組)將一個一維數組轉換爲字符串

  1. json_encode()對變量進行 JSON 編碼

Json_decode()對 JSON 格式的字符串進行解碼

 

  1. cookie的缺陷:
  1. cookie是明文操作。不是很安全。
  2. 截取cookie可以用來cookie欺騙
  3. 不要把cookie當作客戶端存儲容器來操作,每個域名允許的cookie是有限制的,每個瀏覽器限制不同。Cookie最大字節數是4K
  4. Cookie設置後每次請求都會附着再http的頭中,浪費帶寬
  5. 可以用HTML5的localStorage本地存儲來解決

 

 

  1. localStorage的基礎用法
  1. localStorage.setItem($name,$value)//設置
  2. localStorage.getItme($name)//獲取
  3. LocalStorage.removeImte($name)//移除
  4. LocalStorage.clear()//清除全部

 

PHP中的會話控制 session

  1. 什麼是session:持續性的雙向的連接

服務器和瀏覽器保有的共同的密碼的時間

 

  1. 準備建立對話的時候PHP會先查看請求中是否包含session_id,如果沒有服務器會在自己的內存裏新建一個變量,這個變量就是session_id,列如session_1
  2. 服務器會把session_id發送到客戶端瀏覽器保存,一般瀏覽器會把找個id存在cookie中
  3. 之後每次瀏覽器再去訪問服務器是都會攜帶cookie中存儲的session_id,這樣這個服務器就認識這個瀏覽器了
  4. 服務器中的這個session_id變量就可以存放任何會話數據,這些數據是經過序列化處理後存放進去的
  5. 每次瀏覽器訪問服務器都可以評價自己的session_id到服務器中認領自己的數據
  6. 如果想要銷會話,可以刪除會話中的數據,銷燬會話文件

 

  1. PHP中如何使用session會話
  1. 開啓session ---- session_start()

可以通過$_SESSION來設置相關值,設置和讀取都是用這個全局變量

  1. 銷燬session------session_destory()來銷燬
  2. Session_name()獲取session名稱

Session_id()獲取session_id

  1. session有生命週期

setcookie(session_name(),session_id(),time()+3600);

  1. session可以保存數組 直接把數組賦值給$_session
  2. Cookie禁用後session還能用嘛?答:可以,不過要用url方式傳遞session_name/session_id    然後用session_id($_GET[session_name])來綁定session名和id 就可以正常使用session
  1. 徹底銷燬session會話
  1. $_SESSION清空 

$_SESSION=[]

  1. cookie中的數據清空   setcookie cookie過期就可以

If(ini_get(‘session.use_cookies’)){ //判斷session是否使用cookie傳遞的

$params=Session_get_cookie_Params();//獲取設置cookie另外選項的一些數組

Setcookie(session_name(),session_id(),time()-1.$params[‘path’].$parms[‘domain’],$params[‘secure’],$params[‘httponly’])

}

//獲取的path爲根目錄下的會話路徑

  1. 銷燬session

 session_destory()

/**

*銷燬對話

*/

$_SESSION="";

session_destroy();

 

  1. 自定義形式存儲session----自定義session管理器

最好存在redis內存管理器中

Ini_get()得到php ini配置中的某些數據

Ini_set() 修改php ini 配置中的某些數據

session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] ) 設置自定義會話存儲函數,可以將session信息存儲到數據庫中,但是這樣需要在session之前加一臺或者多臺緩存服務器

使用自定義session管理器需要自己寫完Session_set_save_handler 提供的接口,並且在使用前需要將ini配置中的session.save_handler設置爲user--------ini_set(‘session.save_handler’,user)

 

require_once '實現的接口類';

$obj=new 自定義類;

ini_set('session.save_handler', 'user');

session_set_save_handler($obj,true);

session_start();

//下面寫session操作

 

 

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