2016-01-11 11 views
10

में सत्र फ़ाइल नाम बदलना तो लारवेल अपनी स्वयं की सत्र फ़ाइलों को सहेजता है जब कोई/स्टोरेज/फ्रेमवर्क/सत्र फ़ोल्डर में वेबसाइट तक पहुंचता है। इनमें से प्रत्येक सत्र फ़ाइल के नाम यादृच्छिक रूप से जेनरेट किए गए अल्फा न्यूमेरिक अद्वितीय नाम हैं। लेकिन, मैं किसी भी तरह फाइलों का नाम बदलना चाहता हूं और इसके लिए अपना खुद का कस्टम नाम देना चाहता हूं। मेरे पास इसके लिए दो विकल्प हैं।लार्वेल 5.1

  • बदलें फ़ाइल नाम मैन्युअल रूप से एक बार सत्र फ़ाइल बनाई गई है (एक, बनाने के प्रति द्वारा, की जगह)
  • समारोह जो अनियमित अक्षरांकीय नाम उत्पन्न करता है का पता लगाएं और एक अनूठा नाम की स्थापना के अपने तरीके के साथ इसे बदल प्रत्येक फ़ाइल में (यह विधि कम जटिलताओं के साथ आ सकती है)

मेरा मुख्य अंत लक्ष्य प्रत्येक उपयोगकर्ता की सत्र फ़ाइल को अपने स्वयं के उपयोगकर्ता आईडी में नामित करना है जो मेरे डीबी में संग्रहीत है। तो नाम अभी भी अद्वितीय हैं, केवल अंतर यह है कि मैं फ़ाइलों के माध्यम से यादृच्छिक अल्फान्यूमेरिक नामों की तुलना में आसानी से खोज सकता हूं।

तो यदि कोई जानता है कि मैं उपर्युक्त तरीकों में से कोई भी कैसे कर सकता हूं या यदि आप इसे प्राप्त करने के बेहतर तरीके के बारे में सोच सकते हैं, तो यह बहुत अच्छा होगा। कोई भी मदद बहुत ही सराहनीय होगी!

संपादित करें: आखिरकार मैंने जो करने का निर्णय लिया था उसके साथ अपडेट करने का निर्णय लिया। मैंने लैरवेल द्वारा जेनरेट की गई सत्र में निर्मित फाइलों का उपयोग न करने का फैसला किया और महसूस किया कि मेरी अपनी फाइल बनाने के लिए यह बहुत आसान है और इसके बजाय प्रत्येक क्लाइंट इसे एक्सेस कर सकता है। सभी को धन्यवाद!

उत्तर

1

लैरवेल में कई प्रबंधक वर्ग हैं जो ड्राइवर-आधारित घटकों के निर्माण का प्रबंधन करते हैं। इनमें कैश, सत्र, प्रमाणीकरण, और कतार घटक शामिल हैं। एप्लिकेशन की कॉन्फ़िगरेशन के आधार पर एक विशेष ड्राइवर कार्यान्वयन बनाने के लिए प्रबंधक वर्ग जिम्मेदार है। उदाहरण के लिए, सत्र प्रबंधक श्रेणी फ़ाइल, डेटाबेस, कुकी और सत्र ड्राइवरों के कई अन्य कार्यान्वयन बना सकती है।

इनमें से प्रत्येक प्रबंधक में एक विस्तृत विधि शामिल है जिसका उपयोग पर किया जा सकता है ताकि प्रबंधक में नई ड्राइवर रिज़ॉल्यूशन कार्यक्षमता आसानी से इंजेक्ट हो।

एक कस्टम सत्र ड्राइवर के साथ Laravel का विस्तार करने के लिए, हम अपने कस्टम कोड रजिस्टर करने के लिए विधि विस्तार का उपयोग करेगा:

आप अपने AppServiceProvider के बूट विधि में अपने सत्र एक्सटेंशन कोड से देना चाहिए।

लागू SessionHandlerInterface

एप्लिकेशन/प्रदाता/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(); 
     }); 
    } 
} 

ध्यान दें कि हमारे कस्टम सत्र ड्राइवर SessionHandlerInterface लागू करना चाहिए। इस इंटरफ़ेस में केवल कुछ सरल विधियां हैं जिन्हें हमें लागू करने की आवश्यकता है।

एप्लिकेशन/हैंडलर/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) {} 

} 

या आप FileSessionHandler से MyFileHandler का विस्तार करने और प्रासंगिक तरीकों ओवरराइड कर सकते हैं।

FileSessionHandler बढ़ाएँ

एप्लिकेशन/प्रदाता/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); 
     }); 
    } 
} 

एप्लिकेशन/हैंडलर/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); 
    } 
} 

आप विस्तार के सत्र अनुभाग में अधिक प्राप्त कर सकते हैं ढांचा दस्तावेज।

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

+0

उत्तर के लिए धन्यवाद। हालांकि, फाइल का नामकरण कहां है? क्या यह बूट फ़ंक्शन में 'मायफाइल' भाग है? यदि ऐसा है, तो 'myfile' का उपयोग करके, क्या यह सभी सत्र फ़ाइलों के लिए एक स्थिर नाम नहीं होगा क्योंकि मुझे संदेह है कि बूट को एक से अधिक बार बुलाया जाएगा? क्या मैं कुछ भूल रहा हूँ? –

0

अपने अंतिम लक्ष्य सत्र फ़ाइल नाम पर खोज कर रहा है, तो; आपको उन्हें बदलने की जरूरत नहीं है। आप डेटाबेस फ़ाइल नामों को डेटाबेस तालिका में सहेज सकते हैं (या आपकी पसंद की दूसरी फ़ाइल)। फ़ाइल नाम प्राप्त करने के लिए आप this link का उपयोग कर सकते हैं।

एक स्तंभ -> दुकान सत्र फ़ाइल नाम

अन्य स्तंभों -> एक और जानकारियां जो आप चाहते

इस तरह से आप खोज और SQL का उपयोग कर के साथ तेजी से फ़ाइलें प्राप्त कर सकते हैं में संग्रहीत करते हैं। अनुरोध के लिए

+0

यह एक विकल्प है, निश्चित है। लेकिन इसमें नई फाइलें बनाना और सत्र या डेटाबेस में सत्र जानकारी संग्रहीत करना शामिल है। मेरी आवश्यकता के लिए डेटाबेस से पुनर्प्राप्त करने के लिए निरंतर चलाने के लिए मुझे लगातार आवश्यकता होगी, लगभग हर 5-10 सेकंड। फ़ाइलें तेज हो सकती हैं लेकिन मैंने सोचा कि क्या मैं किसी भी तरह से पहले से ही मौजूदा फाइलों तक पहुंच सकता हूं, नई फाइलें क्यों बनायें और ऐसा ही करें? –

0

उपयोग मिडलवेयर

\Illuminate\Session\Middleware\StartSession::class 

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

}); 
संबंधित मुद्दे