天天看點

PHP學習10——Cookie和Session技術Cookie技術Session技術

主要内容:

  1. Cookie技術
    1. 建立cookie
    2. 檢視cookie
    3. 讀取cookie
    4. 用cookie記錄通路時間和次數
    5. 删除cookie
    6. cookie的生命周期
  2.  Session技術
    1. session工作原理
    2. session控制
    3. session的存儲結構
    4. 傳遞session_id

cookie和session是2中不同的存儲機制。

cookie是從一個web頁面到另一個web頁面的資料傳遞方法,它被存儲在用戶端。

session是讓資料在頁面中持續有效的方法,它存儲在伺服器。

cookie将浏覽器網頁的特定資訊以檔案形式儲存在用戶端硬碟中,再次通路該網站,浏覽器首先嘗試讀取cookie檔案,讀取到資料供浏覽器使用。

常見的應用是登陸空間、部落格,讀取每個人的個性化設定。

cookie常用語3個方面:

  • 記錄訪客的某些資訊
  • 在頁面之間傳遞資訊(通常cookie不會用來儲存密碼,但是在一個頁面設定的資料要在另一個頁面使用,可以通過cookie技術實作)
  • 将檢視的web網頁存儲在cookie臨時檔案中,可以加快網頁的通路速度。

/*name是cookie變量名,value是值,time是失效時間(預設為0),
    path是cookie在伺服器端的有效路徑,domain是cookie有效域名,
    secure是否僅通過安全的https協定傳輸(預設為0),httponly是否僅通過http協定傳輸(預設為0)
    */
    //setcookie($name,$value,$time,$path,$domain,$secure,$httponly);      

cookie.php

<?php
	
	//建立cookie
	$sta=setcookie('testcookiename','testvalue',time()+60*60);
	if($sta){
		echo 'Cookie設定成功!';
	}
?>
      

輸出

Cookie設定成功!
      

chrome浏覽器檢視cookie

打開浏覽器的設定》進階設定》

隐私設定/内容設定》所有cookie和網站資料

》找到你的網站名,以及cookie的名字,點選打開即可看到儲存到cookie的内容。

PHP學習10——Cookie和Session技術Cookie技術Session技術
PHP學習10——Cookie和Session技術Cookie技術Session技術
PHP學習10——Cookie和Session技術Cookie技術Session技術

PHP中使用超全局變量$_COOKIE來讀取浏覽器端的Cookie值

如果沒有設定cookie的失效時間,cookie會在浏覽器關閉後失效。

readcookie.php

<?php
	
	//建立cookie
	$sta=setcookie('testcookiename','testvalue',time()+60*60);
	if($sta){
		echo 'Cookie設定成功!<br/>';
	}
	
	//建立cookie
	setcookie('name','Tom');
	setcookie('age','25');
	
	print_r($_COOKIE);
?>
      
Cookie設定成功!
Array ( [testcookiename] => testvalue [name] => Tom [age] => 25 )
      

使用cookie記錄訪客通路時間和通路次數

demo.php

<?php
	
	//通路時間
	echo "通路時間<br/>";
	if(!isset($_COOKIE['visittime'])){
		setcookie('visittime',date('Y-m-d H:i:s'));
		echo '這是您第一次方位本網站<br/>';
	}else{
		echo '您上一次通路本網站是在:'.$_COOKIE['visittime']."<br/>";
		echo '本次通路時間是:'.date('Y-m-d H:i:s')."<br/>";
	}
	
	//通路次數
	echo "通路次數<br/>";
	if(!isset($_COOKIE['num'])){
		setcookie('num',1);
		echo '歡迎您首次通路本網站<br/>';
	}else{
		setcookie('num',$_COOKIE['num']+1);
		echo '這是您今天第'.$_COOKIE['num']." 次通路本網站<br/>";
	}
	

?>
      

第1次輸出

PHP學習10——Cookie和Session技術Cookie技術Session技術

第8次輸出

PHP學習10——Cookie和Session技術Cookie技術Session技術

第13次輸出

PHP學習10——Cookie和Session技術Cookie技術Session技術

沒有設定失效時間,cookie随浏覽器關閉而失效,如果要在浏覽器關閉之前删除cookie,有2種方法。

1、浏覽器手動删除cookie

PHP學習10——Cookie和Session技術Cookie技術Session技術

2、通過程式删除cookie

使用setcookie()删除cookie,将要删除的cookie有效時間設定為目前時間之前即可,

setcookie.php

<?php
	//設定cookie
	setcookie('name','Tom');
	print_r($_COOKIE);

?>
      
Array ( [name] => Tom )
      

removecookie.php

<?php
	
	//删除cookie
	setcookie('name','Tom',time()-1);
	print_r($_COOKIE);
?>
      
Array ( )
      

 Cookie的生命周期

如果不設定cookie過期時間,則表示他的生命周期會随着浏覽器關閉而結束,這種cookie叫做會話cookie,一般不會儲存在硬碟中,而是儲存在記憶體中。

如果設定了cookie的過期時間則浏覽器會把cookie儲存在硬碟中,再次打開浏覽器依然會生效,知道他的有效時間逾時。

但是有的情況是不遵循這個說法的,現在的浏覽器通常會限制每個域名的cookie數量和大小,是以在超過這個限制後,cookie即使沒有超過時間也可能會被删除。

Session技術

與cookie相比,,session檔案儲存的資料在PHP中以變量形式建立,建立的session變量在生命周期(20分鐘)中可以被跨頁面的請求所使用。另外session檔案是存儲在伺服器端的,比cookie存儲在用戶端安全,而且也沒有類似cookie的存儲長度限制。

在計算機術語中,session指一個終端使用者與互動系統進行通信的時間間隔,通常指從注冊進入系統到登出推互相系統所經過的時間,是以可以說session是一個特定的時間概念。

啟動一個session會話時,程式會随機生成一個唯一的session_id,他也是session的檔案名,此時session_id存儲在伺服器,當關閉頁面後,session_id會自動登出,重新登入頁面會再次生成一個随機且唯一的session_id。

session的功能

由于網頁是一種無狀态的連接配接程式,是以無法得知用于的浏覽狀态。在網上購物時,把很多商品加入了購物車,而在結賬時網頁卻不知道你購物車有哪些物品,通過session可以記錄這些資訊,供使用者再次使用。session适用于存儲資訊量比較少的情況。

4個步驟:

  • 啟動會話
  • 注冊會話
  • 使用會話
  • 删除會話

啟動session

session_start();注意啟動一個新的會話之前不可以有其他輸出,否則出現錯誤,這類似于建立cookie。

注冊session

所有session變量都會儲存在數組$_SESSION中,隻需給數組添加元素即可。$_SESSION['name']='Jim';

在php.ini中有session的儲存路徑

PHP學習10——Cookie和Session技術Cookie技術Session技術

session.php

<?php
	//開啟session
	session_start();
	
	//建立2個session變量
	$_SESSION['username']='Jim';
	$_SESSION['password']='123456';
	
	echo "Session建立成功<br/>";
?>
      

  

PHP學習10——Cookie和Session技術Cookie技術Session技術
PHP學習10——Cookie和Session技術Cookie技術Session技術

session變量的存儲結構

變量名|類型:長度:變量值;

使用session

使用方法類似cookie,直接讀取數組

删除session

  • unset($_SESSION['username']),删除單個session
  • $_SESSION=array(),登出所有session
  • session_destroy(),先登出session,然後結束目前session,釋放session中所有資源,徹底将session銷毀

unsetsession.php

<?php
	//開啟session
	session_start();
	
	//建立2個session變量
	$_SESSION['username']='Jim';
	$_SESSION['password']='123456';
	
	//使用session
	if(!empty($_SESSION['username'])){
		$username=$_SESSION['username'];
		echo 'session變量值指派成功<br/>';
	}else{
		echo '該session變量未注冊<br/>';
	}
	
	//删除session
	unset($_SESSION['username']);
	if(empty($_SESSION['username'])){
		echo 'session登出成功<br/>';
	}
?>
      
PHP學習10——Cookie和Session技術Cookie技術Session技術
PHP學習10——Cookie和Session技術Cookie技術Session技術

destroy_session.php

<?php
	//開啟session
	session_start();
	
	//建立2個session變量
	$_SESSION['username']='Jim';
	$_SESSION['password']='123456';
	
	//使用session
	if(!empty($_SESSION['username'])){
		$username=$_SESSION['username'];
		echo 'session變量值指派成功<br/>';
	}else{
		echo '該session變量未注冊<br/>';
	}
	
	//删除session
	unset($_SESSION['username']);
	if(empty($_SESSION['username'])){
		echo 'session登出成功<br/>';
	}
	
	//清空session
	$_SESSION=array();
	if(empty($_SESSION['username'])&&empty($_SESSION['password'])){
		echo '全部session登出成功<br/>';
	}
	
	//銷毀session
	session_destroy();
	echo 'session已經徹底銷毀<br/>';
?>
      

 輸出

session變量值指派成功
session登出成功
全部session登出成功
session已經徹底銷毀
      
PHP學習10——Cookie和Session技術Cookie技術Session技術

  • 基于cookie的方式傳遞session。這種方法有限制,用戶端可以禁用cookie
  • 通過URL參數傳遞,直接将session_id放入URL中

session_cookie.php

<?php
	//開啟session
	session_start();
	
	//設定cookie
	setcookie(session_name(),session_id(),time()+60*60*24);
	
	//建立2個session變量
	$_SESSION['username']='Jim';
	$_SESSION['password']='123456';
	
	echo 'session儲存成功<br/>';

?>
      

showsession.php

<?php
	//開啟session
	session_start();
	
	//設定cookie
	//setcookie(session_name(),session_id(),time()+60*60*24);
	
	//建立2個session變量
	//$_SESSION['username']='Jim';
	//$_SESSION['password']='123456';
	
	echo 'session儲存成功<br/>'.$_SESSION['username'].$_SESSION['password']='123456';

?>
      
session儲存成功
Jim123456
      

通過URL傳遞session

 session_url.php

<?php
	//開啟session
	session_start();
	
	//建立2個session變量
	$_SESSION['username']='Jim';
	$_SESSION['password']='123456';
	
	//輸出下一個頁面連結
	echo '<a href=test.php?'.session_name().'='.session_id().'>test.php</a>';
	

?>
      

test.php

<?php
	session_start();
	
	echo '使用者名:'.$_SESSION['username'].'<br/>';
	echo '密碼:'.$_SESSION['password'].'<br/>';
?>
      
PHP學習10——Cookie和Session技術Cookie技術Session技術
PHP學習10——Cookie和Session技術Cookie技術Session技術

在PHP中有一個預定義常量SID,格式為name=ID,包含了session名和sessionid

所有可以這樣使用

//輸出下一個頁面連結
	echo '<a href=test.php?'.SID.'>test.php</a>';
      

web頁面非常重要的cookie技術和session技術,這裡核心要明白session和cookie的工作原理和不同之處。

ok,就到這裡。