2017-02-20 18 views
0

Я использую структуру Laravel. Существует функция в контроллере, который создает сеанс с именем store_idКак определить, существует ли сеанс с той же переменной в laravel

StoreController.php

function initiate($id) 
{ 
    //Some queries 
    session['store_id' => 'some value']; 
} 

Теперь, если я запускаю эту функцию на одной вкладке, то session::get('store_id') происходит. Но если я открою другую вкладку в том же браузере, то снова запустите функцию, которая означает, что session('store_id') будет снова установлен. Как я могу справиться с этой ситуацией, если уже есть сеанс, тогда он должен перенаправить на его перспективный URL.

ответ

1

Хорошо, прежде всего, Bruuuhhhh been there and done that

Хорошо, давайте начнем. вы хотите, чтобы, если уже есть сеанс с store_id, вы хотите, чтобы пользователь перенаправлял или отправлял обратно.

В контроллере добавить этот

public function initiate() 
{ 
    if(session()->has('store_id')) 
    { 
     //What ever your logic 
    } 
    else 
    { 
     redirect()->to('/store')->withErrors(['check' => "You have session activated for here!."]); 
    } 
} 

Скорее всего, вы бы интересно, что пользователь может просто перейти на другой URL после /store/other-urls Yess он может.

Чтобы избежать этого. Добавить пользовательский middleware

php artisan make:middleware SessionOfStore //You can name it anything. 

В этом промежуточного

public function handle($request, Closure $next) 
{ 
    if($request->session()->has('store_id')) 
    { 
     return $next($request); 
    } 
    else 
    { 
     return redirect()->back()->withErrors(['privilege_check' => "You are not privileged to go there!."]); 
    } 
    return '/home'; 
} 

в главной странице магазина. Добавить anchor tag<a href="/stop">Stop Service</a>

Теперь в вашем web.php

Route::group(['middleware' => 'SessionOfStore'], function() 
{ 
    //Add your routes here. 
    Route::get('/stop', '[email protected]'); 
}); 

Теперь у вас есть ограничение доступа к URL-адресам и проверили сессии.

Сейчас в

public function flushSession() 
{ 
    //empty out the session and 
    return redirect()->to('/home'); 
} 
1

Помощник сессии Laravel имеет функцию has, чтобы проверить это.

if (session()->has('store_id')) 
{ 
    // Redirect to the store 
} 
else 
{ 
    // Set the store id 
} 

The documentation содержит все возможные функции, которые могут быть использованы с помощником сеанса.