Laravel 实现单人登录方案思路

需要避免多人使用同样一个会员账号登录网站是一个重要的技术防护手段,掌握了基础的 HTTP 协议之后,很多问题的解决方案很容易就可以推导出来,不管是限制用户登录、跨站登录、还是超时自动登出都可以轻松的找到解决方案

单人登录可以更好的保护用户和网站的账户安全

好处:
1、保护用户利益,当用户的用户名和密码泄露后,用户可以得到提示你的账号已经在其他地方登录,请注意你的账户安全
2、保护网站利益,避免很多人使用同一个账户登录网站获取网站的服务

不要太把执行效率当回事,数据沉淀会带来长远的价值

当用户登录后就会创建用户相关的session信息,通过控制这些session信息,当有另一个用户登录后就将之前的session信息清除掉或者无效状态,这样客户端的cookie信息与服务器的session信息就无法进行匹配,用户就会处于非登录的状态。
方式:
1、删除之前的session信息(这种方式并不能很好的分析用户信息,不推荐)
2、修改之前的session信息(推荐)

session默认使用文件作为驱动,推荐使用database作为驱动,能持久化数据和对数据进行分析
在laravel中可以通过修改.env文件修改session驱动

php artisan session:table
php artisan migrate

生成mirgrate文件说明

Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->unsignedInteger('user_id')->nullable();# 用户id
    $table->string('ip_address', 45)->nullable(); # 用户登录的ip地址
    $table->text('user_agent')->nullable(); # 用户代理使用的登录设备
    $table->text('payload'); # session中携带的数据
    $table->integer('last_activity'); # 用户访问网站的时间
});

单人登录最简单粗暴的实现方式

可以看到登录的用户session和未登录的session信息
在这里插入图片描述
要想让之前登录的用户处于非登录的状态,就需要在后一个用户登录的时候,将之前的session信息进行删除

在app/Http/Controllers/Auth/LoginController.php控制器中重写AuthenticatesUsers的authenticated方法

//覆写AuthenticatesUsers类的authenticated方法
    protected function authenticated(Request $request, $user)
    {
        //在登录之前判断sessions表中是否有该用户的登录信息,有则删除之前登录的用户session信息
        DB::table('sessions')->where('user_id',$user->id)->delete();
    }

可以辅助我们防护网站保护用户账户的实现方式

上文中删除用户session信息实现的登录功能,并不能很好对用户session信息进行分析
采用对session信息进行修改,使其变成无效的session

通过修改sessions表id,在登录时将旧的id修改,让浏览器找不到这条session信息后便可退出之前的登录,为新登录重新分配一个session数据,对沉淀的旧session信息用于日后的数据分析

//覆写AuthenticatesUsers类的authenticated方法
    protected function authenticated(Request $request, $user)
    {
        //在登录之前判断sessions表中是否有该用户的登录信息,有则修改旧id
        DB::table('sessions')->where('user_id', $user->id)->orderBy('last_activity')->each(function ($session) {
            DB::table('sessions')->where('id', $session->id)->update([
                'id' => 'OUTMAN_' . $session->id
            ]);
        });
    }

建websocket服务器,为网站添加实时通信的能力(后期完善这块知识点)

当有人登录网站后会为用户发送一个实时消息,这样便可以知道账户被别人窃取,并且登录到了系统当中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值