使用session
在PHP中使用session非常簡單薄声,先執(zhí)行session_start方法開啟session显晶,然后通過全局變量$_SESSION進行session的讀寫杖爽。
session_start();
$_SESSION['test'] = time();
var_dump($_SESSION);
session會自動的對要設(shè)置的值進行encode與decode媒咳,因此session可以支持任意數(shù)據(jù)類型瓦糕,包括數(shù)據(jù)與對象等。
session_start();
$_SESSION['ary'] = array('name' => 'jobs');
$_SESSION['obj'] = new stdClass();
var_dump($_SESSION);
默認情況下款筑,session是以文件形式存儲在服務(wù)器上的智蝠,因此當一個頁面開啟了session之后,會獨占這個session文件奈梳,這樣會導致當前用戶的其他并發(fā)訪問無法執(zhí)行而等待∪列耄可以采用緩存或者數(shù)據(jù)庫的形式存儲來解決這個問題漆撞,這個我們會在一些高級的課程中講到。
刪除與銷毀session
刪除某個session值可以使用PHP的unset函數(shù)于宙,刪除后就會從全局變量$_SESSION中去除浮驳,無法訪問。
session_start();
$_SESSION['name'] = 'jobs';
unset($_SESSION['name']);
echo $_SESSION['name']; //提示name不存在
如果要刪除所有的session捞魁,可以使用session_destroy函數(shù)銷毀當前session至会,session_destroy會刪除所有數(shù)據(jù),但是session_id仍然存在谱俭。
session_start();
$_SESSION['name'] = 'jobs';
$_SESSION['time'] = time();
session_destroy();
值得注意的是奉件,session_destroy并不會立即的銷毀全局變量$_SESSION中的值,只有當下次再訪問的時候昆著,$_SESSION才為空县貌,因此如果需要立即銷毀$_SESSION,可以使用unset函數(shù)凑懂。
session_start();
$_SESSION['name'] = 'jobs';
$_SESSION['time'] = time();
unset($_SESSION);
session_destroy();
var_dump($_SESSION); //此時已為空
如果需要同時銷毀cookie中的session_id窃这,通常在用戶退出的時候可能會用到,則還需要顯式的調(diào)用setcookie方法刪除session_id的cookie值。
使用session來存儲用戶的登錄信息
session可以用來存儲多種類型的數(shù)據(jù)杭攻,因此具有很多的用途祟敛,常用來存儲用戶的登錄信息,購物車數(shù)據(jù)兆解,或者一些臨時使用的暫存數(shù)據(jù)等馆铁。
用戶在登錄成功以后,通彻Γ可以將用戶的信息存儲在session中埠巨,一般的會單獨的將一些重要的字段單獨存儲,然后所有的用戶信息獨立存儲现拒。
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['userinfo'] = $userinfo;
一般來說辣垒,登錄信息既可以存儲在sessioin中,也可以存儲在cookie中印蔬,他們之間的差別在于session可以方便的存取多種數(shù)據(jù)類型勋桶,而cookie只支持字符串類型,同時對于一些安全性比較高的數(shù)據(jù)侥猬,cookie需要進行格式化與加密存儲例驹,而session存儲在服務(wù)端則安全性較高。
<?php
session_start();
//假設(shè)用戶登錄成功獲得了以下用戶數(shù)據(jù)
$userinfo = array(
'uid' => 10000,
'name' => 'spark',
'email' => 'spark@163.com',
'sex' => 'man',
'age' => '18'
);
header("content-type:text/html; charset=utf-8");
/* 將用戶信息保存到session中 */
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['name'] = $userinfo['name'];
$_SESSION['userinfo'] = $userinfo;
//* 將用戶數(shù)據(jù)保存到cookie中的一個簡單方法 */
$secureKey = '163'; //加密密鑰
$str = serialize($userinfo); //將用戶信息序列化
//用戶信息加密前
$str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), $str, MCRYPT_MODE_ECB));
//用戶信息加密后
//將加密后的用戶數(shù)據(jù)存儲到cookie中
setcookie('userinfo', $str);
//當需要使用時進行解密
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), base64_decode($str), MCRYPT_MODE_ECB);
$uinfo = unserialize($str);
echo "解密后的用戶信息:<br>";
print_r($uinfo);