IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Laravel 实现单人登录方案思路 -> 正文阅读

[PHP知识库]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服务器,为网站添加实时通信的能力(后期完善这块知识点)

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

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:04:45  更:2022-04-09 18:05:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 12:56:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码