2016-01-11 12 views
10

Così Laravel salva i propri file di sessione quando qualcuno accede al sito Web nella cartella/storage/framework/sessions. Ciascun nome di questi file di sessione è un nome univoco alfanumerico generato a caso. Ma, mi piacerebbe in qualche modo rinominare i file e dare il mio nome personalizzato per questo. Ho due opzioni per questo.Modifica dei nomi dei file di sessione in Laravel 5.1

  • Cambiare il nome del file manualmente una volta creato il file della sessione (da una copia di creare, sostituire)
  • Trovare la funzione che genera in modo casuale il nome alfanumerico e cambiare con il mio modo di impostare un nome univoco a ciascun file (questo metodo potrebbe venire con meno complicazioni)

Il mio obiettivo principale è quello di rinominare il file di sessione di ciascun utente nel proprio ID utente memorizzato nel mio db. Quindi i nomi sono ancora unici, l'unica differenza è che posso cercare tra i file più facilmente che se avessero nomi alfanumerici casuali.

Quindi, se qualcuno sa come potrei fare uno dei metodi di cui sopra o se riesci a pensare a un modo migliore per raggiungere lo stesso, sarebbe fantastico. Qualsiasi aiuto è molto apprezzato!

EDIT: Ho deciso di aggiornare qui con quello che avevo deciso di fare finalmente. Ho deciso di non utilizzare i file di sessione incorporati generati da Laravel e ho capito che è molto più semplice creare un mio file e avere invece accesso a ciascun client. Grazie a tutti!

risposta

1

Laravel dispone di diverse classi Manager che gestiscono la creazione dei componenti basati su driver . Questi includono la cache, la sessione, l'autenticazione e i componenti della coda. La classe manager è responsabile per la creazione di un'implementazione di driver particolare basata sulla configurazione dell'applicazione . Ad esempio, la classe SessionManager può creare file, database, cookie e varie altre implementazioni dei driver di sessione .

Ciascuno di questi gestori include un metodo di estensione che può essere utilizzato per immettendo facilmente nuove funzionalità di risoluzione del driver nel gestore.

Per estendere laravel con un driver di sessione personalizzato, useremo il metodo estendere a registrare il nostro codice personalizzato:

Si dovrebbe inserire il vostro codice di estensione della sessione nel metodo di avvio del vostro AppServiceProvider.

Implementare SessionHandlerInterface

app/fornitori/AppServiceProvider.php

<?php 
namespace App\Providers; 

use Session; 
use Illuminate\Support\ServiceProvider; 
use App\Handlers\MyFileHandler; 

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
     Session::extend('file', function($app) 
     { 
      return new MyFileHandler(); 
     }); 
    } 
} 

Nota che il nostro autista sessione personalizzato dovrebbe attuare il SessionHandlerInterface. Questa interfaccia contiene solo alcuni semplici metodi che dobbiamo implementare.

app/gestori/MyFileHandler.php

<?php 
namespace App\Handlers; 

use SessionHandlerInterface; 

class MyFileHandler implements SessionHandlerInterface { 

    public function open($savePath, $sessionName) {} 
    public function close() {} 
    public function read($sessionId) {} 
    public function write($sessionId, $data) {} 
    public function destroy($sessionId) {} 
    public function gc($lifetime) {} 

} 

Oppure si può estendere MyFileHandler da FileSessionHandler e sovrascrivere i metodi pertinenti.

Estendere FileSessionHandler

app/fornitori/AppServiceProvider.php

<?php 
namespace App\Providers; 

use Session; 
use Illuminate\Support\ServiceProvider; 
use Illuminate\Session\FileSessionHandler; 
use App\Handlers\MyFileHandler; 

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
     Session::extend('file', function($app) 
     { 
      $path = $app['config']['session.files']; 
      return new MyFileHandler($app['files'], $path); 
     }); 
    } 
} 

app/gestori/MyFileHandler.php

<?php 
namespace App\Handlers; 

use Illuminate\Filesystem\Filesystem; 
use Illuminate\Session\FileSessionHandler; 

class MyFileHandler extends FileSessionHandler 
{ 
    public function __construct(Filesystem $files, $path) 
    { 
     parent::__construct($files, $path); 
    } 
} 

È possibile trovare maggiori nella sezione Sessione di estendere il documento quadro.

https://laravel.com/docs/5.0/extending#session

+0

Grazie per la risposta. Tuttavia, dove si trova esattamente la denominazione del file? È la parte 'myfile' nella funzione boot? Se è così, usando lì 'myfile', non sarà un nome statico per tutti i file di sessione poiché dubito che il boot verrà chiamato più di una volta? Mi sto perdendo qualcosa? –

0

Se il vostro obiettivo finale è alla ricerca sui nomi di file di sessione; non è necessario cambiarli. È possibile salvare i nomi dei file di sessione in una tabella del database (o un altro file a scelta). È possibile utilizzare this link per ottenere nomi di file.

Una colonna -> nomi dei file negozio di sessione

altre colonne -> memorizzare un altro informazioni che si desidera

In questo modo è possibile cercare e trovare i file più velocemente con l'utilizzo di SQL.

+0

Questa è un'alternativa, certo. Ma ciò comporta la creazione di nuovi file e l'archiviazione di informazioni sulla sessione in esso o database anche. Il mio requisito mi richiederà di eseguire continuamente query per il recupero dal database, quasi ogni 5-10 secondi. I file potrebbero essere più veloci ma ho pensato di poter accedere a file già esistenti in qualsiasi modo, perché creare nuovi file e fare lo stesso? –

0

uso di middleware per la richiesta

\Illuminate\Session\Middleware\StartSession::class 

Route::group(['middleware' => [\Illuminate\Session\Middleware\StartSession::class]], function() { 

}); 
Problemi correlati