Вход Регистрация
Файл: src/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php
Строк: 186
<?php

namespace IlluminateSession;

use 
SessionHandlerInterface;
use 
IlluminateContractsAuthGuard;
use 
IlluminateDatabaseConnectionInterface;
use 
IlluminateContractsContainerContainer;

class 
DatabaseSessionHandler implements SessionHandlerInterface, ExistenceAwareInterface
{
    
/**
     * The database connection instance.
     *
     * @var IlluminateDatabaseConnectionInterface
     */
    
protected $connection;

    
/**
     * The name of the session table.
     *
     * @var string
     */
    
protected $table;

    
/**
     * The container instance.
     *
     * @var IlluminateContractsContainerContainer
     */
    
protected $container;

    
/**
     * The existence state of the session.
     *
     * @var bool
     */
    
protected $exists;

    
/**
     * Create a new database session handler instance.
     *
     * @param  IlluminateDatabaseConnectionInterface  $connection
     * @param  string  $table
     * @param  IlluminateContractsContainerContainer|null  $container
     * @return void
     */
    
public function __construct(ConnectionInterface $connection, $table, Container $container = null)
    {
        
$this->table = $table;
        
$this->container = $container;
        
$this->connection = $connection;
    }

    
/**
     * {@inheritdoc}
     */
    
public function open($savePath, $sessionName)
    {
        return 
true;
    }

    
/**
     * {@inheritdoc}
     */
    
public function close()
    {
        return 
true;
    }

    
/**
     * {@inheritdoc}
     */
    
public function read($sessionId)
    {
        
$session = (object) $this->getQuery()->find($sessionId);

        if (isset(
$session->payload)) {
            
$this->exists = true;

            return 
base64_decode($session->payload);
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function write($sessionId, $data)
    {
        
$payload = $this->getDefaultPayload($data);

        if (! 
$this->exists) {
            
$this->read($sessionId);
        }

        if (
$this->exists) {
            
$this->getQuery()->where('id', $sessionId)->update($payload);
        } else {
            
$payload['id'] = $sessionId;

            
$this->getQuery()->insert($payload);
        }

        
$this->exists = true;
    }

    
/**
     * Get the default paylaod for the session.
     *
     * @param  string  $data
     * @return array
     */
    
protected function getDefaultPayload($data)
    {
        
$payload = ['payload' => base64_encode($data), 'last_activity' => time()];

        if (! 
$container = $this->container) {
            return 
$payload;
        }

        if (
$container->bound(Guard::class)) {
            
$payload['user_id'] = $container->make(Guard::class)->id();
        }

        if (
$container->bound('request')) {
            
$payload['ip_address'] = $container->make('request')->ip();

            
$payload['user_agent'] = substr(
                (string) 
$container->make('request')->header('User-Agent'), 0, 500
            
);
        }

        return 
$payload;
    }

    
/**
     * {@inheritdoc}
     */
    
public function destroy($sessionId)
    {
        
$this->getQuery()->where('id', $sessionId)->delete();
    }

    
/**
     * {@inheritdoc}
     */
    
public function gc($lifetime)
    {
        
$this->getQuery()->where('last_activity', '<=', time() - $lifetime)->delete();
    }

    
/**
     * Get a fresh query builder instance for the table.
     *
     * @return IlluminateDatabaseQueryBuilder
     */
    
protected function getQuery()
    {
        return 
$this->connection->table($this->table);
    }

    
/**
     * Set the existence state for the session.
     *
     * @param  bool  $value
     * @return $this
     */
    
public function setExists($value)
    {
        
$this->exists = $value;

        return 
$this;
    }
}
Онлайн: 1
Реклама