如何在laravel 5中登录后记住会话?

21

我开始使用 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的设置?然后确认新环境是否按照其正确设置。 - koalaok
9个回答

1
你可以尝试使用 Session:save(); 方法。这个方法解决了我在将用户重定向到支付网关时session未被保留的问题。据我所知,这是由于HTTP请求中的某些中断引起的。

1
如果 storage/logs 中的错误日志没有提供有关目录权限等问题的线索,请检查您服务器上的 .env 文件中加载到 config/session.php 中的 SESSION_DRIVER 变量,以确保您根据服务器配置选择了正确的持久化机制(文件、cookie、数据库、apc、memcached、redis 等)。
如果这样还不起作用,请检查 config/session.php 文件。我曾经看到有人将 lifetime 属性设置为 0,认为这会使会话无限期,但实际上却导致了您遇到的问题。

1
请检查您如何存储会话。
默认情况下,Laravel 使用基于文件的方式存储 ( storage/framework/sessions ),请确保该目录是可写的。

1
如果本地工作完美无缺而线上失败,可能有以下两种情况: 1)您需要将存储文件夹的权限设置为可写。 2)当您在浏览器上本地登录并保存cookie时,如果尝试在线登录,则会在本地注销,因为它们基本上是相同的 cookie,但指向不同的域。因此,如果要同时在本地和在线上工作,则应该使用不同的浏览器。

1
使用以下代码。
 setInterval(function(){
    $.get('/my/ping/route');
 }, 1000 * 60);

.ajaxError()

0

0
首先,您必须检查服务器设置。检查存储文件夹的权限。(sudo chmod -R 777 storage) 如果问题仍未解决,则清除浏览器缓存并注销本地应用程序,尝试重新登录。也许在设置cookie后,会破坏代码。

0

-1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接