And*_*rei 61 php session laravel
我对Laravel 5有一个有趣的问题.
登录用户后,登录状态不会跨页面保留.显然它与某些事情有关Session::
.
我登录用户的方式很简单:
if (Auth::attempt(['email' => $data['email'], 'password' => $data['password']],
isset($data['remember_me']) ? TRUE : FALSE))
{
return redirect()->intended('/');
}
Run Code Online (Sandbox Code Playgroud)
print_r(Session::all());
如果用户未登录,则简单地给出以下内容:
Array
(
[_token] => wV8o75lZnCZ0f6CMMQgdBBM2AxSYjtWisAXx6TgZ
[flash] => Array
(
[old] => Array
(
)
[new] => Array
(
)
)
[_previous] => Array
(
[url] => http://localhost/public
)
)
Run Code Online (Sandbox Code Playgroud)
用户登录后重定向到/
该阵列如下所示:
Array
(
[_token] => wV8o75lZnCZ0f6CMMQgdBBM2AxSYjtWisAXx6TgZ
[flash] => Array
(
[old] => Array
(
)
[new] => Array
(
)
)
[_previous] => Array
(
[url] => http://localhost/public/
)
[login_82e5d2c56bdd0811318f0cf078b78bfc] => 2
)
Run Code Online (Sandbox Code Playgroud)
但是,在任何导致页面刷新或重定向的操作之后,会话状态将丢失.
我的config/session.php
文件看起来像这样:
<?php
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'laravel_session',
'path' => '/',
'domain' => null,
'secure' => false,
];
Run Code Online (Sandbox Code Playgroud)
可以写入和读取本地存储的会话文件.
我尝试使用database
驱动器而不是文件.同样的事情发生了[login_xx] => 2
键/值丢失并且我已经注销了.
由于Session::
没有完全重置,我怀疑我没有正确登录用户或只是做一些我不应该做某事的事情.
Kal*_*hal 12
我遇到了类似的问题,我简单地说:
Session::save();
Run Code Online (Sandbox Code Playgroud)
在任何添加/更新/删除会话存储之后.所以它看起来像:
$id = Input::get('id');
Session::forget('cart.' .$id);
Session::save();
Run Code Online (Sandbox Code Playgroud)
小智 7
我解决了变化
'cookie' => 'laravel_session',
Run Code Online (Sandbox Code Playgroud)
至
'cookie' => 'myapp_session',
Run Code Online (Sandbox Code Playgroud)
根据laravel的说法,cookie的名称会影响每个驱动程序
我对 Laravel 不熟悉,但在 CodeIgniter 上,我将用户会话保存在 CI 的 Session 类中,Laravel 也有一个。
我建议使用比默认 $_SESSION 更持久的内置会话- 可能它将用户数据保存在数据库中,并且在每个页面刷新/更改时,会话都会从数据库再次填充。
当用户进行身份验证时,只需保存其会话数据,如下所示:
Session::put('userData', 'value');
Run Code Online (Sandbox Code Playgroud)
...其中值可以只是一个布尔值或保存用户特定数据的整个对象。
在每个页面加载时,从会话中获取用户数据:
$user = Session::get('userData');
if($user->id) echo 'user is logged-in'; //or if($user) - depends on what you store in 'userData' key
else echo 'guest only privilegies';
Run Code Online (Sandbox Code Playgroud)
编辑:
我看到您使用 Auth 类。我的答案主要是用户手动登录并且它有效。
我认为 Auth 类应该默认执行此操作,但可能您缺少一些配置或存在错误。
这是一个可能的解决方案(Laravel 4,但值得一试):http ://laravel.io/forum/11-11-2014-authcheck-always-returning-false
截至目前,您应该尝试更改驱动程序值
'driver' => env('SESSION_DRIVER', 'file')
Run Code Online (Sandbox Code Playgroud)
到
'driver' => 'file'
Run Code Online (Sandbox Code Playgroud)
...还在 Laravel 的文档中您可以看到驱动程序必须这样定义。
归档时间: |
|
查看次数: |
29396 次 |
最近记录: |