主要内容:
- Cookie技術
- 建立cookie
- 檢視cookie
- 讀取cookie
- 用cookie記錄通路時間和次數
- 删除cookie
- cookie的生命周期
- Session技術
- session工作原理
- session控制
- session的存儲結構
- 傳遞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的内容。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuEWMhNmMhRGOyMmMhFjN5YmZhVmN0UTY1QWY1UTOygTYfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
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次輸出
第8次輸出
第13次輸出
沒有設定失效時間,cookie随浏覽器關閉而失效,如果要在浏覽器關閉之前删除cookie,有2種方法。
1、浏覽器手動删除cookie
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的儲存路徑
session.php
<?php
//開啟session
session_start();
//建立2個session變量
$_SESSION['username']='Jim';
$_SESSION['password']='123456';
echo "Session建立成功<br/>";
?>
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/>';
}
?>
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已經徹底銷毀
- 基于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中有一個預定義常量SID,格式為name=ID,包含了session名和sessionid
所有可以這樣使用
//輸出下一個頁面連結
echo '<a href=test.php?'.SID.'>test.php</a>';
web頁面非常重要的cookie技術和session技術,這裡核心要明白session和cookie的工作原理和不同之處。
ok,就到這裡。