2017 © Pedro Peláez
 

library psr7-http-session

Alternative to PHP's native session handler for PSR-7

image

ujjwal/psr7-http-session

Alternative to PHP's native session handler for PSR-7

  • Tuesday, August 22, 2017
  • by ojhaujjwal
  • Repository
  • 1 Watchers
  • 7 Stars
  • 2 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

PSR-7 Session

Build Status ![Coverage Status][coverage-image] Latest Stable Version Total Downloads Latest Unstable Version License, (*1)

Alternative to PHP's native session handler. It does not depend on PHP's session capability. It can be used with non-typical php based applications like with react/http., (*2)

But, why?

But, why? - You don't have to depend on session_ functions which means you can write testable code. - You don't have to depend on $_SESSION superglobal allowing you to write more testable code. - You can even use this for non-typical php based applications like with react/http. - You can create a framework agnostic library/module depending on psr-7 HTTP message interfaces and this session library., (*3)

Getting started

$sessionOptions = [
    'name' => 'session_id',
    'sid_length' => 40,
    'cookie' => [
        'domain' => 'your-app.com',
    ]
];

$sessionHandler = new Ojhaujjwal\Session\Handler\FileHandler('path/to/session-data');
$sessionManager = new Ojhaujjwal\Session\SessionManager(
    $sessionHandler,
    $request,
    $sessionOptions
);
$storage = $sessionManager->getStorage();

$sessionManager->start();

// you can manipulate $storage just like $_SESSION   
$storage['some_key'] = 'some_value';
$someKey = $storage['some_key'];

$response = $sessionManager->close($response);
//return the response the the client

Installation

composer require ujjwal/psr7-http-session, (*4)

Session Options

name

Type: string Required: true, (*5)

Name of the session which is used as cookie name. It should only contain alphanumeric characters., (*6)

sid_length

Type: integer Default: 40, (*7)

the length of session ID string. Session ID length can be between 22 to 256., (*8)

Type: array, (*9)

Used to pass cookie options. See cookie options section., (*10)

domain

Type: string Default: derived from the Host header of request, (*11)

domain to be set in the session cookie., (*12)

path

Type: string Default: /, (*13)

path to be set in the session cookie., (*14)

http_only

Type: boolean Default: true, (*15)

Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be accessible by scripting languages, such as JavaScript., (*16)

secure_only

Type: boolean Default: True if the original request is https, (*17)

It indicates whether cookies should only be sent over secure connections., (*18)

lifetime

Type: integer Default: 0 for session cookie, (*19)

It specifies the lifetime of the cookie in seconds which is sent to the browser. The value 0 means "until the browser is closed." Defaults to 0, (*20)

same_site

Type: string Default: Lax Specifies SameSite cookie attribute. Very useful to mitigate CSRF by preventing the browser from sending this cookie along with cross-site requests. Allowed values: * empty string for not setting the attribute * ParagonIE\Cookie\Cookie::SAME_SITE_RESTRICTION_LAX(fairly strict) * ParagonIE\Cookie\Cookie::SAME_SITE_RESTRICTION_STRICT(very strict), (*21)

Basic operations

Initializing SessionManager

$sessionManager = new Ojhaujjwal\Session\SessionManager(
    $sessionHandler,
    $request,
    $sessionOptions
);

Starting session

$sessionManager->start();

$sessionManager->isStarted(); // returns true

Retrieve session id

$sessionManager->getId(); //returns alphanumeric string

Regenerate session id

$sessionManager->regenerate();

$sessionManager->regenerate(false); // does not destroy old session
$response = $sessionManager->close($response);

Retrieving session storage

$storage = $sessionManager->getStorage();

It implements IteratorAggregate, ArrayAccess, Countable So, it will look very much like $_SESSION. Just replace the $_SESSION occurrences in your app with instance of the object., (*22)

Write to session

$storage->abcd = 'efgh';
//or
$storage['abcd'] = 'efgh';
//or
$storage->set('abcd', 'efgh');

Read from session

$abcd =  $storage->abc;
//or
$abcd = $storage['abcd'];
//or
$abcd = $storage->get('abcd');

Remove from session

unset($storage->abc);
//or
unset($storage['abcd']);
//or
$storage->remove('abcd');

Flush session data

$storage->flush();

Session Middleware

It also comes with a http middleware which you can use to automatically initialize session and write cookie to response. The middleware is compatible with http-interop/http-middleware based single pass approach or express-like double pass approach., (*23)

 $middleware = new Ojhaujjwal\Session\SessionMiddleware($handler, $sessionOptions);
 $middleware->process($request, $delegate);
 // or
 $middleware($request, $response, $next);

 //using with zend-expressive
 //after errorhandler and before the routing middleware
 $app->pipe(\Ojhaujjwal\Session\SessionMiddleware::class);

TODO

  • [ ] Fix build in php7.2
  • [ ] Garbage collection
  • [ ] Cookie Based session handler
  • [ ] Encryption Session Handler

License

MIT, (*24)

The Versions

22/08 2017

dev-master

9999999-dev

Alternative to PHP's native session handler for PSR-7

  Sources   Download

MIT

The Requires

 

The Development Requires

by Ujjwal Ojha

psr-7 http psr7 session http-session

05/08 2017

1.0.0

1.0.0.0

Alternative to PHP's native session handler for PSR-7

  Sources   Download

MIT

The Requires

 

The Development Requires

by Ujjwal Ojha

psr-7 http psr7 session http-session