Giter VIP home page Giter VIP logo

psr7-session's Introduction

PSR-7 Session

Build Status Coverage Status Latest Stable Version Total Downloads Latest Unstable Version License

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.

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.

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

Session Options

name

Type: string Required: true

Name of the session which is used as cookie name. It should only contain alphanumeric characters.

sid_length

Type: integer Default: 40

the length of session ID string. Session ID length can be between 22 to 256.

cookie

Type: array

Used to pass cookie options. See cookie options section.

Cookie Options

domain

Type: string Default: derived from the Host header of request

domain to be set in the session cookie.

path

Type: string Default: /

path to be set in the session cookie.

http_only

Type: boolean Default: true

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.

secure_only

Type: boolean Default: True if the original request is https

It indicates whether cookies should only be sent over secure connections.

lifetime

Type: integer Default: 0 for session cookie

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

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)

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

Close session and write to response header as cookie

$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.

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.

 $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

psr7-session's People

Contributors

ojhaujjwal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

xesau hi-alan

psr7-session's Issues

php7.0 supprot?

is it the reason why it can not support php7.0 ? Debian9 php packages are on php7.0..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.