登录laravel 5后如何获取会话记忆?

Posted

技术标签:

【中文标题】登录laravel 5后如何获取会话记忆?【英文标题】:How to get session remember after login in laravel 5? 【发布时间】:2015-10-09 02:25:23 【问题描述】:

我开始使用 laravel 5 处理我的项目。我意识到在我登录到我的站点后,它在我的本地目录中可以正常工作,但我只知道当我将项目托管到服务器时遇到了问题。每次登录后,会话都不记得导致我出现问题的原因。

public function postLogin()

    $hit = 0;

    if(Request::ajax())
        $pw = Request::input('pw');
        if(!empty($pw))
            $admin_pass = AdminPassword::first(['admin_pass']);
            $ip_address = Request::ip();
            if(!empty($admin_pass) && trim($admin_pass->admin_pass) == trim($pw))
                if(Auth::attempt(['username' => Request::input('username'), 'password' => Request::input('password'),'status'=>1]))
                    try
                        $user = Auth::user();
                        $user->last_login = date('Y-m-d H:i:s');
                        $user->login_ip = $ip_address;
                        $user->save();
                        $permissions = Auth::user()->permission;
                        if(!empty($permissions) && count($permissions) >0)
                            session(['ROLE_PERMISSION'=>$permissions]);
                        
                        $failed = FailedLogin::whereRaw('ip_address = INET_ATON(\''.$ip_address.'\')')->first();
                        if(!empty($failed))
                            $failed->delete();
                        
                    catch (\Exception $ex)
                    $url = Request::session()->pull('url.intended', '/');
                    return ['url'=>$url,'msg'=>'Successfully.','status'=>true,'hit'=>$hit];
                else
                    $hit = $this->updateFailedLogin($ip_address,Request::input('username'));
                
            else
                $hit = $this->updateFailedLogin($ip_address,Request::input('username'));
            
        
    else
        return redirect()->route('login');
    
    return ['url'=>'','msg'=>'Try again.','status'=>false,'hit'=>$hit];

请帮我解决这个问题。

非常感谢。

【问题讨论】:

检查 config/auth.php 设置?然后如果新环境根据它设置正确。 【参考方案1】:

如果这在本地工作得很好,而且不仅可能是两件事之一。 1)您需要将存储文件夹的权限设置为可写。 2)当您在浏览器上本地登录并保存您的cookie时,如果您尝试在线登录,它会在本地注销您,因为它基本上是相同的cookie但指向不同的域。因此,如果您想同时在本地和在线工作,您可能应该使用不同的浏览器

【讨论】:

【参考方案2】:

使用下面的代码

 setInterval(function()
    $.get('/my/ping/route');
 , 1000 * 60);

.ajaxError()

【讨论】:

【参考方案3】:

你可以尝试的是 Session:save();它解决了我在将用户重定向到支付网关时没有进行会话的问题。

据我所知,这是由于 HTTP 请求中断造成的。

【讨论】:

【参考方案4】:

如果 storage/logs 中的错误日志没有提供有关目录权限等问题的任何线索,请检查您服务器上的 .env 文件中的 >SESSION_DRIVER 变量在 config/session.php 中加载,以确保您拥有基于服务器配置(文件、cookie、数据库、apc、memcached、redis、等等)。

如果这没有帮助,请检查 config/session.php 文件。我看到有人将生命周期属性设置为 0 认为这会使会话无限期,但实际上它导致了您遇到的问题。

【讨论】:

【参考方案5】:

请检查您存储会话的方式。

默认情况下,laravel 使用基于文件的 (storage/framework/sessions),确保目录是可写

【讨论】:

【参考方案6】:

1)设置文件夹权限 2) 清除缓存并再次尝试登录。启用调试错误报告,以便您检查清除日志。

参考:https://laracasts.com/discuss/channels/general-discussion/starting-session-after-authebtication

【讨论】:

【参考方案7】: 首先你必须检查你的服务器设置。检查存储文件夹的权限。 (sudo chmod -R 777 storage) 如果未修复。然后清除浏览器缓存,注销您的本地应用程序并尝试再次登录。也许你可以在设置 cookie 后破解密码。

【讨论】:

【参考方案8】:

如果您正在托管您的项目,可能是您没有正确的文件系统权限。请改用会话数据库驱动程序。

请参阅Laravel 5 store session in database/redis。

【讨论】:

【参考方案9】:

我不确定你想做什么, 你应该试试这个:

Session::put('url.intended', '/')

【讨论】:

以上是关于登录laravel 5后如何获取会话记忆?的主要内容,如果未能解决你的问题,请参考以下文章

错误 500:如何通过 Laravel 自定义配置文件获取会话变量?

Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息

Laravel 5 - 用户在会话生命周期后不注销

任何想法如何使用 vue js 和 vue 路由器在 laravel 5.3 中进行基于会话的身份验证

Laravel 5.2 或 5.3:如何正确实施检查会话是不是已登录

修复 laravel 5 会话在刷新或进入另一个页面后过期?