2015-04-22 13 views
7

मैं लार्वेल 5 मिडलवेयर में सत्रों के साथ काम करने की कोशिश कर रहा हूं, लेकिन वे काम नहीं कर रहे हैं। विशिष्ट होना करने के लिए - var_dump(Session::all()); संभाल विधि के शुरू में मुझे एक मूल्य के साथ सरणी देता है -, _tokken तो इस विधिसत्र मिडलवेयर में काम नहीं कर रहा है Laravel 5

Session::put('lang',$locale); 
var_dump(Session::all()); 

के अंत में मुझे दो मूल्यों के साथ सरणी देता है _tokken और मेरे लैंग कुंजी, लेकिन उसके बाद इसे रीफ्रेश करें, क्योंकि मुझे लगता है कि दूसरे रीफ्रेश के बाद एक ही परिणाम होना चाहिए।

मैं हालांकि शायद मैं अपने मिडलवेयर सत्र मिडलवेयर से पहले भरी हुई है, जो सच था, तो मैं बंद कर लिया और अब मेरा Kernel.php इस तरह दिखता है -

protected $middleware = [ 
     'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 
     'Illuminate\Cookie\Middleware\EncryptCookies', 
     'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 
     'Illuminate\Session\Middleware\StartSession', 
     'Illuminate\View\Middleware\ShareErrorsFromSession', 
     'App\Http\Middleware\VerifyCsrfToken', 
     'App\Http\Middleware\Language', 

    ]; 

तो मैं पूछता हूँ - क्या मैं गलत कर रहा हूँ?

संपादित करें: -

//Note that the Laravel sessions do not make use of PHP "native" sessions in any way since they are crappy. 
एक टिप्पणी के रूप

, तो session_status के साथ अपने परीक्षण() प्रासंगिक नहीं है रोशन \ सत्र \ मिडिलवेयर \ StartSession में खुदाई मैं इस पाया।

+0

मैंने अभी अपना जवाब हटा दिया क्योंकि यह गलत था। मैंने अपनी परियोजना के मिडलवेयर में 'सत्र :: सभी() '' का परीक्षण किया और यह ठीक काम करता है। गलत उत्तर के लिए खेद है। –

+0

@limonte कोई चिंता नहीं, हाँ मैंने लिखा है कि सत्र :: सभी() वापस आते हैं, लेकिन बाद में मेरे लिए अपना खुद का मान – Subject

+0

सेट नहीं किया गया है, यह अपेक्षाकृत काम करता है, यानी _token, _previous और मेरे कस्टम मान –

उत्तर

5

आप जब भी आप संशोधन सहेजना चाहते

\Session::save(); 

का उपयोग करें ताकि कहते हैं कि मैं उपयोगकर्ता

\Session::put('lang','en'); 
\Session::save(); 

की भाषा संग्रहीत करना चाहते हैं जब आप ताज़ा अब आप अपने नव मिलेगा की सुविधा देता है की जरूरत है बनाई गई कुंजी

+0

लार्वेल 5.2 – Daan

+1

में यह 'सेव' विधि आवश्यक नहीं है कभी-कभी यह आवश्यक है। यदि आप 'रीडायरेक्ट() -> रूट (' myroute ') -> send() 'करते हैं, तो यह सत्र डेटा संग्रहीत नहीं करता है, इसलिए आपको' सत्र :: सेव(); 'पहले' जोड़ना चाहिए। –

+0

इससे मदद नहीं मिली –

0

ध्यान देने योग्य एक और बात, यदि आप कुछ मिडलवेयर बना रहे हैं जो सत्र से डेटा को छेड़छाड़/पुनर्प्राप्त कर रहा है, तो आपको यह सुनिश्चित करना होगा कि यह StartSession वेब मिडलवेयर के बाद लोड हो।

4

मुझे एक ही समस्या थी, मैं लॉगिन पर लोकेल को स्टोर करने के लिए सत्र का उपयोग कर रहा था, फिर मुख्य डैशबोर्ड पर रीडायरेक्ट करता था, लेकिन जब मिडलवेयर लोड होता है, तो सत्र अभी तक शुरू नहीं हुआ है। तो यह काम नहीं करेगा।

मुझे पहले का कहना है, मेरे पास कोई Laravel विशेषज्ञ हूँ, लेकिन इस तरह से Laravel 5.3 में काम करता है:

1) php कारीगर मेकअप: मिडलवेयर SetApplicationLanguage

2) इस एप्लिकेशन में जोड़े/HTTP/कर्नेल .php $ middlewareGroup चर:

\Illuminate\Session\Middleware\StartSession::class, 
\App\Http\Middleware\SetApplicationLanguage::class, 

सूचना है कि इस नए मिडिलवेयर StartSession कक्षा के बाद आता है।

3) यह मेरा एप्लिकेशन/HTTP है/मिडलवेयर/SetApplicationLanguage.php:

namespace App\Http\Middleware; 

use App; 
use Closure; 
use Illuminate\Support\Facades\Auth; 

class SetApplicationLanguage 
{ 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request    
    * @param \Closure $next    
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (isset(Auth::user()->locale)) { 
      App::setLocale(Auth::user()->locale); 
     } 

     return $next($request); 
    } 
} 

सूचना है कि मैं इस उदाहरण में यह सत्र का उपयोग नहीं करते। ऐसा इसलिए है क्योंकि जब मैं स्टार्टसेशन क्लास के बाद अपना मिडलवेयर जोड़ता हूं, सत्र काम करेगा, लेकिन ऑथ :: उपयोगकर्ता() फिर से उपलब्ध होगा, इसलिए मैं केवल Auth :: उपयोगकर्ता() -> लोकेल का उपयोग कर सकता हूं और सत्रों की कोई ज़रूरत नहीं है।

लेकिन आप इसे कर सकते हैं, बस ऐप :: सेटलोकेल (सत्र :: get ('locale') का उपयोग करें और इसके कारण सत्र मुखौटा शामिल है।

0

मुझे एक ही समस्या थी, मैं मिडलवेयर में मूल्य निर्धारित कर रहा था और कुछ शर्त सही होने पर उसी जगह में परेशान था।

मैं पूरी तरह से 404s भूल गया, कुछ फाइलें 404 (गायब छवियां) प्राप्त कर रही थीं, इसलिए nginx 404 पेज दिखाने के लिए लैरवेल ऐप से अनुरोध पारित कर रहा था, और क्योंकि यह अन्य यूआरएल था, मैं वहां परेशान था। मुझे लगता है कि सत्र में भाषा सामग्री संग्रहित करने के साथ यह वही समस्या है। बस अपने ब्राउज़र नेटवर्किंग की जांच करें और देखें कि पृष्ठ लोड करते समय कौन से अनुरोध किए जा रहे हैं, आप एक ही समय में सेटिंग और परेशान हो सकते हैं

संबंधित मुद्दे