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

namespace IlluminateSession;

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

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

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

    
/*
     * The number of minutes the session should be valid.
     *
     * @var int
     */
    
protected $minutes;

    
/**
     * 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  string  $minutes
     * @param  IlluminateContractsContainerContainer|null  $container
     * @return void
     */
    
public function __construct(ConnectionInterface $connection$table$minutesContainer $container null)
    {
        
$this->table $table;
        
$this->minutes $minutes;
        
$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->last_activity)) {
            if (
$session->last_activity Carbon::now()->subMinutes($this->minutes)->getTimestamp()) {
                
$this->exists true;

                return;
            }
        }

        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 payload 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'), 0500
            
);
        }

        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
Реклама