У меня небольшая проблема с сеансами в Laravel.
Я сделал функцию аутентификации, которая выглядит так:
public function postSignin(){ $attempt = Auth::attempt(array('username' => Input::get('username'), 'password' => Input::get('password'))); if ($attempt) { return Redirect::to('index')->with('message', 'Anda telah login!' . $attempt) ->with('usersess', Input::get('username')); } else if(!$attempt){ return Redirect::to('auth') ->with('message', 'Kombinasi email/password salah ' . $attempt) ->withInput(); } }
посмотрим, что я отправил «useress» var в сеанс, который я использую в своем заголовке заголовка следующим образом: {{ Session::get('usersess') }}
и поместите его в заголовок.
НО проблема в том, когда я обновляю PAGE, сессия отсутствует! Есть ли подсказка, как ее вернуть без сеанса?
Я узнал о php и использует <?php session_start() ?>
– основная функция, но как она работает в laravel?
Спасибо!
ОБНОВИТЬ мою конфигурацию session.php
return array( /* |-------------------------------------------------------------------------- | 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' => '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' => 180, 'expire_on_close' => 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().'/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' => array(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' => 'invsess', /* |-------------------------------------------------------------------------- | 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, );
->with
на эту загрузку загружаются только данные на сеанс. Если вы хотите сохранить элемент в сеансе, используйте Session::put('key', 'value')
. Итак, для вашего примера:
if($attempt) { Session::put('usersess', Input::get('username')); return Redirect::to('index')->with('message', 'Anda telah login!' . $attempt); }
РЕДАКТИРОВАТЬ
Вы можете использовать Session::get('key')
для получения значения или Session::pull('key')
который возвращает значение и забывает значение. Вы также можете использовать Session::forget('key')
для удаления элемента. Session::flush()
очищает все от сеанса.
Документы сеанса можно найти здесь
Эта проблема случается для меня, когда я использую
use Illuminate\Support\Facades\Session;
Вместо этого вы можете использовать
use Symfony\Component\HttpFoundation\Session\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');
Я хотел внести свой вклад в это, так как я столкнулся с той же проблемой, но мое решение отличалось от того, что было проголосовано.
После ввода элементов в мою сессию они, похоже, исчезали при загрузке следующей страницы.
То, как я это делал, было через вызов AJAX. Всякий раз, когда я выполняю вызов AJAX, я всегда использую exit
в конце, чтобы предотвратить ненужную обработку страницы. Я обнаружил, что этот exit
не позволял Laravel продолжать дальше и фактически записывать эти данные в постоянную сессию.
Голос Звезды Фокс : Удачи!
Это, очевидно, не ваша проблема, а для тех, кто нашел этот вопрос, и принятый ответ не решает вашу проблему:
Если вы сохраняете свой сеанс laravel в базе данных, существует ограничение на то, насколько велико это значение сеанса. У миграции сеанса Laravel есть поле под названием «полезная нагрузка», которое является типом текста. Если вы превысите лимит на этом поле, вся сессия будет отключена. Это происходило со мной, когда я динамически добавлял данные модели json в свою сессию.
Schema::create('sessions', function (Blueprint $table) { $table->string('id')->unique(); $table->text('payload'); $table->integer('last_activity'); });
Сколько текста UTF-8 подходит в поле «Текст» MySQL?
Убедитесь, что вы не удаляете файлы cookie в своем .js. Это вызвало у меня проблему:
var now = new Date(); now.setTime(now.getTime()+(-1*24*60*60*1000)); var expires = "=;"+" path=/; expires="+now.toUTCString(); document.cookie = "lastpage"+expires;