2015-09-04 2 views
3

У меня есть простой файл, в котором я создаю сессии, это выглядит следующим образом:Почему сеансы исчезают при обновлении с помощью Laravel 5.x?

<?php namespace App\Repositories\Managers; 

use Illuminate\Support\Facades\Session; 
use Carbon\Carbon; 

class SessionTest { 

    public function __construct() 
    { 
    } 

    public function sessionTest() 
    { 
     Session::put('test', 111); 
     dd(Session::all()); 
    } 
} 

Он получает мне сессию права, как и ожидался.

array:4 [▼ 
    "_token" => "pYbrTbhnsLx6BfUNZusedQSYiBGxL3t9W7IyRVAh" 
    "_previous" => array:1 [▶] 
    "flash" => array:2 [▼ 
    "old" => [] 
    "new" => [] 
    ] 
    "test" => 111 
] 

Теперь по какой-то причине, когда я открываю еще одну страницу вверх и дисплей Session :: все() он возвращает мне следующее:

array:3 [▼ 
    "_token" => "pYbrTbhnsLx6BfUNZusedQSYiBGxL3t9W7IyRVAh" 
    "_previous" => array:1 [▶] 
    "flash" => array:2 [▼ 
    "old" => [] 
    "new" => [] 
    ] 
] 

В принципе, похоже, что это удаление всех когда я открываю новую страницу.

Мой файл session.php выглядит следующим образом:

<?php 

return [ 

    /* 
    |-------------------------------------------------------------------------- 
    | Default Session Driver 
    |-------------------------------------------------------------------------- 
    | 
    | This option controls the default session "driver" that will be used on 
    | requests. By default, we will use the lightweight native driver but 
    | you may specify any of the other wonderful drivers provided here. 
    | 
    | Supported: "file", "cookie", "database", "apc", 
    |   "memcached", "redis", "array" 
    | 
    */ 

    'driver' => env('SESSION_DRIVER', 'file'), 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Lifetime 
    |-------------------------------------------------------------------------- 
    | 
    | Here you may specify the number of minutes that you wish the session 
    | to be allowed to remain idle before it expires. If you want them 
    | to immediately expire on the browser closing, set that option. 
    | 
    */ 

    'lifetime' => 120, 

    'expire_on_close' => false, 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Encryption 
    |-------------------------------------------------------------------------- 
    | 
    | This option allows you to easily specify that all of your session data 
    | should be encrypted before it is stored. All encryption will be run 
    | automatically by Laravel and you can use the Session like normal. 
    | 
    */ 

    'encrypt' => false, 

    /* 
    |-------------------------------------------------------------------------- 
    | Session File Location 
    |-------------------------------------------------------------------------- 
    | 
    | When using the native session driver, we need a location where session 
    | files may be stored. A default has been set for you but a different 
    | location may be specified. This is only needed for file sessions. 
    | 
    */ 

    'files' => storage_path().'/framework/sessions', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Database Connection 
    |-------------------------------------------------------------------------- 
    | 
    | When using the "database" or "redis" session drivers, you may specify a 
    | connection that should be used to manage these sessions. This should 
    | correspond to a connection in your database configuration options. 
    | 
    */ 

    'connection' => null, 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Database Table 
    |-------------------------------------------------------------------------- 
    | 
    | When using the "database" session driver, you may specify the table we 
    | should use to manage the sessions. Of course, a sensible default is 
    | provided for you; however, you are free to change this as needed. 
    | 
    */ 

    'table' => 'sessions', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Sweeping Lottery 
    |-------------------------------------------------------------------------- 
    | 
    | Some session drivers must manually sweep their storage location to get 
    | rid of old sessions from storage. Here are the chances that it will 
    | happen on a given request. By default, the odds are 2 out of 100. 
    | 
    */ 

    'lottery' => [2, 100], 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Cookie Name 
    |-------------------------------------------------------------------------- 
    | 
    | Here you may change the name of the cookie used to identify a session 
    | instance by ID. The name specified here will get used every time a 
    | new session cookie is created by the framework for every driver. 
    | 
    */ 

    'cookie' => 'ck_session', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Cookie Path 
    |-------------------------------------------------------------------------- 
    | 
    | The session cookie path determines the path for which the cookie will 
    | be regarded as available. Typically, this will be the root path of 
    | your application but you are free to change this when necessary. 
    | 
    */ 

    'path' => '/', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Cookie Domain 
    |-------------------------------------------------------------------------- 
    | 
    | Here you may change the domain of the cookie used to identify a session 
    | in your application. This will determine which domains the cookie is 
    | available to in your application. A sensible default has been set. 
    | 
    */ 

    'domain' => null, 

    /* 
    |-------------------------------------------------------------------------- 
    | HTTPS Only Cookies 
    |-------------------------------------------------------------------------- 
    | 
    | By setting this option to true, session cookies will only be sent back 
    | to the server if the browser has a HTTPS connection. This will keep 
    | the cookie from being sent to you if it can not be done securely. 
    | 
    */ 

    'secure' => false, 

]; 

Похоже, что файл сеанса не получает написано, когда я проверить его. Он сохраняет только значения по умолчанию.

В чем главная проблема? Никогда раньше не сталкивался с этим.

+1

Прочтите, пожалуйста, разрешение на permissoin. –

ответ

1

Правильно ли вы назначили разрешение на запись (т. 777) для каталога хранилища в приложении. Это может вызвать проблемы.

3

Попробуйте эту команду перед дд():

Session::save() 

Session :: сохранить() будет автоматически вызываться при визуализации для просмотра. В вашем случае вы выходите перед вызовом этой функции. Таким образом, ваша сессия не была сохранена.

+0

нет такой команды, как сохранение сеанса в laravel. – mdamia

+0

Ну, так как laravel использует пакет HttpFoundation от Symfony, на самом деле существует метод сохранения https://github.com/symfony/HttpFoundation/blob/master/Session/Session.php – falnyr

+0

. Я не знаю, почему вы подавляете мой ответ. –

0

Использование:

use Symfony\Component\HttpFoundation\Session\Session; 

вместо

use Illuminate\Support\Facades\Session; 

//to set a session variable use 
$session = new Session(); 
$session->set('variableName', $requestData['key']); 

//to get that session variable 
$session = new Session(); 
$session->get('variableName'); 
0

Проблема заключалась в том, что я удалил куки в JavaScript, поэтому, возможно, проверить, если вы не используете что-то как это в ваших .js перед обновлением:

var now = new Date(); 
now.setTime(now.getTime()+(-1*24*60*60*1000)); 
var expires = "=;"+" path=/; expires="+now.toUTCString(); 
document.cookie = "lastpage"+expires; 
Смежные вопросы