PDA

View Full Version : حرفه ای: كلاس كار با سشن!



MRmoon
چهارشنبه 16 مرداد 1392, 19:49 عصر
با سلام.

دوستان يك كلاس براي كار با سشن نوشتم.
متد هاش كلا از متهاي جادويي استفاده كردم.
,__call __get , __set , __construct , __unset

اينم كد كلاس:

<?php
/**
* Session class for using sessions.
* @author Mohammad Mahdi gholamian
* @version 2
* @copyright agham24@yahoo.com , 2013
*/

namespace library;

class session{
/**
* session safe mode.
* @var bool
*/
private $safe = true;
/**
* Construct.
* Start session if not started yet.
*/
function __construct( )
{
$this->manager()->start();
}
/**
* Get a session.
* @param string $session_name
* @return mixed
* @access public
*/
function __get( $session_name )
{
if( substr( $session_name , 0 ,1 ) == "_" ){
$this->safe = false;
$session_name = substr( $session_name , 1 );
}
if( ! isset( $_SESSION[$session_name] ) ){
return false;
}
if( $this->safe == true )
return htmlspecialchars( $_SESSION[$session_name] );
else
return $_SESSION[$session_name];
}
/**
* Update session value or add a session.
* @param string $session_name
* @param mixed $_session_value
* @return mixed
* @access public
*/
function __set( $session_name , $_session_value )
{
$_SESSION[$session_name] = $_session_value;
return $_session_value;
}
/**
* Unset a session.
* @param string $session_name
* @return bool
* @access public
*/
function __unset( $session_name )
{
if( ! $this->$session_name )
return false;
unset( $_SESSION[$session_name] );
return true;
}
/**
* Get object of SessionManagement class.
* @param string $name
* @param array $args
* @return mixed
*/
function __call( $name , $args ){
if( $name != 'manager' )
return false;
unset( $name , $args );
static $object;
if( gettype( $object ) == 'object' )
return $object;
$object = new SessionManagement;
return $object;
}
}

class SessionManagement{
/**
* Session name.
* @var string
* @access private
*/
private $name;
/**
* Session id.
* @var string
* @access private
*/
private $id;
/**
* Session satatus.
* @var integer
* @access private
*/
private $status;
/**
* Session save path.
* @var string
* @access private
*/
private $save_path;
/**
* Constructor.
*/
function __construct()
{
$this->name = session_name( );
$this->id = session_id( );
$this->status = session_status( );
$this->save_path = session_save_path( );
}
/**
* Start session.
* @access public
*/
function start( )
{
if( $this->status == 1 ){
session_start( );
$this->__construct( );
}
}
/**
* Regenerate session id.
* @param bool $delOldSession
* @access public
*/
function reId( $delOldSession = true )
{
if( $this->status == 1 ){
$this->start( );
}
session_regenerate_id( $delOldSession );
}
/**
* Destroy all registered data.
* @access public
*/
function destroy( ){
session_destroy( );
}
/**
* Set session save path.
* @param string $path
* @access public
*/
function save_path( $path )
{
session_save_path( $path );
$this->__construct( );
}
/**
* Set session id.
* @param string $id
* @access public
*/
function set_id( $id ){
session_id( $id );
$this->__construct( );
}
/**
* Get this session data.
* @return object
* @access public
*/
function data( )
{
return (object) get_object_vars( $this );
}
}
?>

خوب اينو شما توي يك صفحه ذخيره كنين.

موقعي كه اينكلود كردين وقتي خواستين يك آبجكت بسازين بايد namespace تعريف شده رو هم در نظر بگيرين!!!

نمونه كار با كلاس:

<?php

include ( 'session.php' );

$session = new library\session;

//Create a session.
$session->session_name = 'session_value';
//show session (delete html special chars)
$session->session_name;
//show session ( do not delete html special chars)
$session->_session_name;
//Delete session
unset( $session->session_name );
//Object of manager
$session_manager = $session->manager();
//Regenerate id
$session_manager->reId();
//Show session id
echo $session_manager->data()->id;
// Destroy all sessions
$session_manager->destroy();
// Show session save path
echo $session_manager->data()->save_path;
// Set session save path
$session_manager->save_path( 'your path!' );

?>

نظراتتون رو در مورد اين كلاس بگيد خوشحال ميشم.

با تشكر : محمد مهدي غلاميان.

MRmoon
چهارشنبه 16 مرداد 1392, 22:41 عصر
كلاس رو ويرايش كردم. :)