|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单。session 我没事的时分写的自立完成Session功效的类,基于文件体例存储Session数据,测试根基经由过程,还对照好玩,实践使用没成心义,只不外是进修Session是若何完成的。
普通基于文件存储Session数据效力不是很高,究竟跟磁盘IO是有关系的,假如需求多台办事器同享数据,可以思索利用NFS来存储数据,假如需求对照快的速度,可以思索利用同享内存(shm)来保留数据,直接把Session数据存储途径指定为/dev/shm,如许磁盘IO会进步很多,不外shm空间对照小,普通Linux下是60多M,所以不成能保留太多半据。
<?php
//=======================================
// 法式:File-Based Session Class
// 功效:基于文件存储的 Session 功效类
// 作者: heiyeluren
// 博客: http://blog.csdn.net/heiyeshuwu
// 工夫: 2006-12-22
//=======================================
/**
* 类名: FileSession Class
* 功效: 自立完成基于文件存储的 Session 功效
* 描写: 这个类就是完成Session的功效, 根基上是经由过程设置客户真个Cookie来保留SessionID,
* 然后把用户的数据保留在办事器端,最初经由过程Cookie中的Session Id来肯定一个数据是不是是用户的,
* 然落后行响应的数据操作, 今朝的弱点是没有渣滓搜集功效
*
* 本体例合适保留在通俗文件、同享内存(SHM)、NFS办事器等基于文件存储的体例,保举保留在同享
* 内存傍边,由于同享内存存取效力对照高,然而空间对照小,重启后就烧毁了
*/
class FileSession
{
var $sessId = '';
var $sessSavePath = '/tmp/';
var $isCreatePath = true;
var $sessExpireTime = '';
var $sessFilePrefix = 'sess_';
var $cookieName = '__SessHandler';
/**
* 机关函数
*
* @param bool $isInit - 是不是实例化对象的时分启动Session
*/
function FileSession($isInit = false){
if ($isInit){
$this->start();
}
}
//-------------------------
// 内部办法
//-------------------------
/**
* 启动Session操作
*
* @param int $expireTime - Session生效工夫,缺省是0,当阅读器封闭的时分生效, 该值单元是秒
*/
function start($expireTime = 0){
$sessId = $_COOKIE[$this->cookieName];
if (!$sessId){
if (!$this->_checkSavePath()){
$this->_showMessage('Session save path '. $this->sessSavePath .' not or create path failed');
}
$this->sessId = $this->_getId();
$this->sessExpireTime = ($expireTime > 0) ? time() + $expireTime : 0;
setcookie($this->cookieName, $this->sessId, $this->sessExpireTime, "/", '');
$_SESSION = array();
$this->_writeFile();
} else {
$this->sessId = $sessId;
$_SESSION = unserialize($this->_getFile($sessId));
}
}
/**
* 判别某个Session变量是不是注册
*
* @param string $varName -
* @return bool 存在前往true, 不存在前往false
*/
function is_registered($varName){
if (!isset($_SESSION[$varName])){
return false;
}
return true;
}
/**
* 注册一个Session变量
*
* @param string $varName - 需求注册成Session的变量名
* @param mixed $varValue - 注册成Session变量的值
* @return bool - 该变量名已存在前往false, 注册胜利前往true
*/
function register($varName, $varValue){
if (isset($_SESSION[$varName])){
return false;
}
$_SESSION[$varName] = $varValue;
$this->_writeFile();
return true;
}
/**
* 烧毁一个已注册的Session变量
*
* @param string $varName - 需求烧毁的Session变量名
* @return bool 烧毁胜利前往true
*/
function unregister($varName){
unset($_SESSION[$varName]);
$this->_writeFile();
return true;
}
/**
* 烧毁一切已注册的Session变量
*
* @return 烧毁胜利前往true
*/
function destroy(){
$_SESSION = array();
$this->_writeFile();
return true;
}
/**
* 获得一个已注册的Session变量值
*
* @param string $varName - Session变量的称号
* @return mixed - 不存在的变量前往false, 存在变量前往变量值
*/
function get($varName){
if (!isset($_SESSION[$varName])){
return false;
}
return $_SESSION[$varName];
}
/**
* 获得一切Session变量
*
* @return array - 前往一切已注册的Session变量值
*/
function getAll(){
return $_SESSION;
}
/**
* 获得以后的Session ID
*
* @return string 获得的SessionID
*/
function getSid(){
return $this->sessId;
}
/**
* 获得办事器端保留的Session数据的途径
*
* @return string 保留Session的途径
*/
function getSavePath(){
return $this->sessSavePath;
}
/**
* 设置保留Session数据的途径
*
* @param string $savePath - 需求保留Session数据的相对途径
*/
function setSavePath($savePath){
$this->sessSavePath = $savePath;
}
//-------------------------
// 外部接口
//-------------------------
/**
* 生成一个Session ID
*
* @return string 前往一个32位的Session ID
*/
function _getId(){
return md5(uniqid(microtime()));
}
/**
* 反省保留Session数据的途径是不是存在
*
* @return bool 胜利前往true
*/
function _checkSavePath(){
if (file_exists($this->sessSavePath)){
return true;
}
if (!$this->isCreatePath){
return false;
}
if (!@mkdir($this->sessSavePath)){
$this->_showMessage('Failed: Session cache path '. $this->sessSavePath .'is not exists, create failed');
}
@chmod($this->sessSavePath, 0777);
return true;
}
/**
* 获得Session文件中的数据
*
* @param string $sessId - 需求获得Session数据的SessionId
* @return unknown
*/
function _getFile($sessId = ''){
$sessId = ($sessId == '') ? $this->sessId : $sessId;
$sessFile = $this->sessSavePath . $this->sessFilePrefix . $sessId;
if (!file_exists($sessFile)){
$this->_showMessage('Failed: Session file '. $sessFile .' not exists');
}
return file_get_contents($sessFile);
}
/**
* 把以后的Session数据写入到数据文件
*
* @param string $sessId - Session ID
* @return 胜利前往true
*/
function _writeFile($sessId = ''){
$sessId = ($sessId == '') ? $this->sessId : $sessId;
$sessFile = $this->sessSavePath . $this->sessFilePrefix . $sessId;
$sessStr = serialize($_SESSION);
if (!$fp = @fopen($sessFile, "w+")){
$this->_showMessage('Failed: Open session save file '. $sessFile .' failed');
}
if (!@fwrite($fp, $sessStr)){
$this->_showMessage('Failed: Write session data to '. $sessFile .' failed');
}
@fclose($fp);
return true;
}
/**
* 显示提醒信息
*
* @param string $strMessage - 需求显示的信息内容
* @param bool $isFailed - 是不是是掉败信息, 缺省是true
*/
function _showMessage($strMessage, $isFailed = true){
if ($isFailed){
exit($strMessage);
}
echo $strMessage;
}
}
?>
既然选择了PHP,就要坚持学下去!大家有没有问自己为什么会选择学习PHP呢?就我个人而言,完全是因为兴趣,因为我的专业和计算机完全无关,但是就是对编程很赶兴趣,尤其对网络编程、web开发特别赶兴趣。 |
|