, (*1)
, (*2)
Hoa is a modular, extensible and
structured set of PHP libraries.
Moreover, Hoa aims at being a bridge between industrial and research worlds.
, (*3)
Hoa\Session
, (*4)
This library allows to manipulate sessions easily by creating “namespaces”, i.e.
an entry in the $_SESSION
global variable. It also allows to manipulate flash
sessions., (*5)
Each namespace has a profile. Amongst many things, it implies we can control
lifetime of each namespace individually. This library can be used in conjunction
of ext/session
(especially to configure session)., (*6)
Learn more., (*7)
Installation
With Composer, to include this library into
your dependencies, you need to
require hoa/session
:, (*8)
$ composer require hoa/session '~0.0'
For more installation procedures, please read the Source
page., (*9)
Testing
Before running the test suites, the development dependencies must be installed:, (*10)
$ composer install
Then, to run all the test suites:, (*11)
$ vendor/bin/hoa test:run
For more information, please read the contributor
guide., (*12)
Quick usage
We propose a quick overview of three usages: manipulating a namespace,
expiration handling and destructing a namespace., (*13)
Manipulating a namespace
We will start a user
namespace. If this namespace is empty, it implies two
things: either the session is newly created or it has expired. In all cases, we
print first time
and save the current time in foo
. And if the namespace is
not empty, we print other times
and dump the saved time. Thus:, (*14)
$user = new Hoa\Session\Session('user');
if ($user->isEmpty()) {
echo 'first time', "\n";
$user['foo'] = time();
} else {
echo 'other times', "\n";
var_dump($user['foo']);
}
First execution will print first time
and next ones will print other times
followed by a timestamp., (*15)
No need to start the session, it will be done automatically. But if we want to,
we can use the session_start
function or the Hoa\Session\Session::start
static method, which is more sophisticated., (*16)
Expiration handling
If a namespace expires before the session, either an event is fired on the
channel hoa://Event/Session/<namespace>:expired
or an exception
Hoa\Session\Exception\Expired
is thrown (if no callable listens the channel).
We can test if the namespace is expired with the help of the
Hoa\Session\Session::isExpired
method or we can declare the namespace as
expired with the help of the Hoa\Session\Session::hasExpired
method (this
method will throw an exception or fire an event)., (*17)
Considering the previous example, we will declare the namespace as expired when
the session is empty:, (*18)
Hoa\Event\Event::getEvent('hoa://Event/Session/user:expired')
->attach(function (Hoa\Event\Bucket $bucket) {
echo 'expired', "\n";
});
$user = new Hoa\Session\Session('user');
if ($user->isEmpty()) {
$user->hasExpired();
echo 'first time', "\n";
$user['foo'] = time();
} else {
echo 'other times', "\n";
var_dump($user['foo']);
}
First execution will print expired
and first time
, and next ones will print
other times
followed by a timestamp., (*19)
If an empty session does not imply an expiration (depending of our workflow and
configuration), we could avoid the call to $user->hasExpired()
: the test is
automatically done during the construction of the namespace., (*20)
We can modify the lifetime by using the Hoa\Session\Session::rememberMe
method; for example:, (*21)
$user->rememberMe('+1 day');
And we can also forget the namespace:, (*22)
$user->forgetMe();
Destructing a namespace
Destructing a namespace uses the Hoa\Session\Session::delete
method:, (*23)
$user = new Hoa\Session\Session('user');
$user['foo'] = 'bar';
$user->delete();
Stored data in the namespace are lost because we explicitly delete the
namespace., (*24)
If we want to destroy the session (including all namespaces and cookie), we
could use the Hoa\Session\Session::destroy
static method. Again, no need to
previously start the session manually if it is not done., (*25)
Documentation
The
hack book of Hoa\Session
contains detailed information about how to use this library and how it works., (*26)
To generate the documentation locally, execute the following commands:, (*27)
$ composer require --dev hoa/devtools
$ vendor/bin/hoa devtools:documentation --open
More documentation can be found on the project's website:
hoa-project.net., (*28)
Getting help
There are mainly two ways to get help:, (*29)
Contribution
Do you want to contribute? Thanks! A detailed contributor
guide explains
everything you need to know., (*30)
License
Hoa is under the New BSD License (BSD-3-Clause). Please, see
LICENSE
for details., (*31)