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

时间:2015-07-20 03:30:46

标签: php session laravel-5

我开始使用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];
}

请帮帮我。

非常感谢。

9 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用以下代码

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

.ajaxError()

答案 2 :(得分:1)

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

据我所知,这是由HTTP请求中断引起的。

答案 3 :(得分:1)

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

如果这样做无效,请检查 config / session.php 文件。我见过有人将终身属性设置为 0 ,认为这会使会话无限期,但实际上它会导致你遇到的问题。

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

  • 首先是您的服务器设置,您必须检查它。检查存储文件夹的权限。 (sudo chmod -R 777 storage
  • 如果没有修复。然后清除浏览器缓存,并注销本地应用程序并尝试再次登录。也许你可以在设置cookie后打破代码。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

请参阅Laravel 5 store session in database/redis

答案 8 :(得分:-1)

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

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