01/10/2018, 16:57

MVC CMS - Xây dựng thư viện xử lý lớp Session

Tiếp tục với các bài viết trong series hướng dẫn xây dựng một CMS theo mô hình MVC thì trong bài viết này mình sẽ tiếp tục xây dựng một thư viện quản lý Session của CMS. Và mình sẽ không nói lại về kiến thức tổng quát của session nữa nếu bạn chưa thực sự hiểu và nắm rõ về session thì bạn có thể xem ...

Tiếp tục với các bài viết trong series hướng dẫn xây dựng một CMS theo mô hình MVC thì trong bài viết này mình sẽ tiếp tục xây dựng một thư viện quản lý Session của CMS. Và mình sẽ không nói lại về kiến thức tổng quát của session nữa nếu bạn chưa thực sự hiểu và nắm rõ về session thì bạn có thể xem lại tại Session & Cookie trong PHP

Tổng quát trong lớp này sẽ có các hàm chức năng sau.

  • setup: Cài đặt & khởi tạo các tham số ban đầu của session
  • exists: Kiểm tra một biến session có tồn tại hay không.
  • put: Gán giá trị cho một biến session.
  • get: Lấy value một biến session
  • delete: Xóa một biến session đã tồn tại
  • destroy: Hủy toàn bộ session trong hệ thống kể từ sau khi gọi hàm.
  • flash: Flash một message session

1. Hàm setup session

Để có thể hiểu rõ hơn về các thông số cài đặt Session cho một ứng dụng bất kỳ bạn có thể xem thêm tại http://php.net/manual/en/session.configuration.php

public static function setup(){
	// Stop adding SID to URLs
	@ini_set('session.use_trans_sid', 0);
	
	// How to store data
	@ini_set('session.serialize_handler', 'php');
	
	// Use cookie to store the session ID
	@ini_set('session.use_cookies', Config::get('session/session_cookie'));
	
	// Name of our cookie
	@ini_set('session.name', Config::get('session/session_name'));
	@session_name(Config::get('session/session_name'));
	
	// Check each HTTP Referer
	@ini_set('session.referer_check', preg_replace('/:.*/', ', $_SERVER['HTTP_HOST']));
	
	// Life time of cookie
	@ini_set('session.cookie_lifetime', Config::get('session/session_expiry'));
	@session_set_cookie_params(Config::get('session/session_expiry'));
	
	// Auto-start session
	@ini_set('session.auto_start', 1);
	return true;
}

2. Hàm check session .

Hàm này được sử dụng để kiếm tra một biến session bất kỳ có tồn tại hay không.

public static function exists($name){
	return (isset($_SESSION[$name])) ? true : false;
}

3. Hàm Put sesion.

Hàm này được sử dụng để gán giá trị cho một biến session bất kỳ.

public static function put($name, $value){
	return $_SESSION[$name] = $value;
}

4. Hàm Get sesion

Hàm này được sử dụng để lấy giá trị của một biến bất kỳ của một session.

public static function get($name){
	if(self::exists($name))
		return $_SESSION[$name];
	return false;
}

OK và một số hàm khác nữa !

Trong folder core/common bạn tạo một file với tên là session.class.php. Mỗi một object bấy kỳ trong TzCMS đều phải đặt tên theo cấu trúc [tên_đối_tượng].class.php

<?php if (!defined('ROOT')) exit('No direct script access allowed'); 
	/*
	|------------------------------------------------------------
	| TzCMS - Content management system website
	| @Author	: Tz.Thiêm (buivanthiem.it@gmail.com)
	| @Date		: 2009/1/18
	| @Version	: 2.1.1
	| @Copyright (c) TzCMS. All Rights Reserved,
	|------------------------------------------------------------
	| Email: info@chiasephp.net
	| Website: http://www.chiasephp.net
	| -----------------------------------------------------------
	*/
	class Session{
		/*
		|------------------------------------------------
		| Set up session handling
		|------------------------------------------------
		|*/
		public static function setup(){
			// Stop adding SID to URLs
			@ini_set('session.use_trans_sid', 0);
			
			// How to store data
			@ini_set('session.serialize_handler', 'php');
			
			// Use cookie to store the session ID
			@ini_set('session.use_cookies', Config::get('session/session_cookie'));
			
			// Name of our cookie
			@ini_set('session.name', Config::get('session/session_name'));
			@session_name(Config::get('session/session_name'));
			
			// Check each HTTP Referer
			@ini_set('session.referer_check', preg_replace('/:.*/', ', $_SERVER['HTTP_HOST']));
			
			// Life time of cookie
			@ini_set('session.cookie_lifetime', Config::get('session/session_expiry'));
			@session_set_cookie_params(Config::get('session/session_expiry'));
			
			// Auto-start session
			@ini_set('session.auto_start', 1);
			return true;
		}
		
		/*
		|------------------------------------------------
		| Check session exists
		| @Param $session_name
		| @Return TRUE/FALSE
		|------------------------------------------------
		*/
		public static function exists($name){
			return (isset($_SESSION[$name])) ? true : false;
		}
		
		/*
		|------------------------------------------------
		| Store value to session
		| @Param $session_name, $value
		| @Return TRUE/FALSE
		|------------------------------------------------
		*/
		public static function put($name, $value){
			return $_SESSION[$name] = $value;
		}
	
		/*
		|------------------------------------------------
		| Get session exists
		| @Param $session_name
		| @Return Value
		|------------------------------------------------
		*/
		public static function get($name){
			if(self::exists($name))
				return $_SESSION[$name];
			return false;
		}
		
		/*
		|------------------------------------------------
		| Delete session exists
		| @Param $session_name
		|------------------------------------------------
		*/
		public static function delete($name){
			if(self::exists($name)){
				unset($_SESSION[$name]);
			}
		}
		
		/*
		|------------------------------------------------
		| Destroys the session and erases session storage
		|------------------------------------------------
		*/
		function destroy(){
			unset($_SESSION);
			if ( isset( $_COOKIE[session_name()] )){
				setcookie(session_name(), ', time()-42000, '/');
			}
			session_destroy();
		}
		
		/*
		|------------------------------------------------
		| Flash session message
		|------------------------------------------------
		*/
		public static function flash($name,$type = null,$string = ',$add = false){
			if(self::exists($name)){
				$flash = (array) self::get($name);
				if($add){
					$flash[] = array("type" => $type,"message" => $string);
					self::put($name, $flash);
				}else{
					self::delete($name);
				}
				return $flash;
			}else{
				self::put($name, array(array("type" => $type,"message" => $string)));
			}
		}
	}
?>

Mặc định là mình đã có thể sử dụng các chức năng mà lớp session cung cấp rồi nhưg mình cần gọi hàm setup() của Sesion khi bắt đầu hệ thống chạy.

Bạn ở file /core/init.php và thêm vào dòng sau.

/*
|-----------------------------------------------------
| Session 
|-----------------------------------------------------
*/
if(!Session::setup()){
	trigger_error('Session setup failed', E_USER_ERROR);
	exit();
}

Tổng kết.

Như vậy là mình đã xây dựng xong lớp thư viện xử lý session trong hệ thống. Bài viết tiếp theo mình sẽ tiếp tục xây dựng thư viện database trong TzCMS.

    0