如何从 Laravel 的特定会话中注销用户?

Posted

技术标签:

【中文标题】如何从 Laravel 的特定会话中注销用户?【英文标题】:How To Logout user from specific session in Laravel? 【发布时间】:2019-11-13 18:36:15 【问题描述】:

我正在尝试实现用户登录历史记录并允许用户从特定设备注销

我使用SESSION_DRIVER=database 并在数据库中有sessions 表 根据laravel documentation

我有user_logins 具有以下结构的表:

session_id |user_id | ip_address |用户代理 |浏览器名称 | 位置 |登录名 | is_active

我完全能够使用UserEventSubscriberhandleUserLogin函数将上述信息存储在表user_logins

现在我想从特定设备上注销用户,该怎么做?

我可以使用ip_addressuser_agentuser_logins 表中删除条目,但我也想从特定设备上注销该用户。

请大家帮我解决这个问题。

【问题讨论】:

【参考方案1】:

将此方法放入您的控制器并设置合适的执行路径

public function removeSession($id)
    \Session::getHandler()->destroy($id);
    return redirect()->back();

【讨论】:

访问这个laravel.com/docs/5.8/session当你在数据库中存储会话时表名应该是sessions 是的,我有 2 个表,sessions user_logins 用于保存设备登录历史记录【参考方案2】:
public function authLogoutForOccGolf(Request $request) 
    $request->session()->flush();       
    return redirect('/');       

【讨论】:

这将刷新当前登录用户的所有会话,我想删除登录多个设备的用户的单个会话

以上是关于如何从 Laravel 的特定会话中注销用户?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:从应用程序中注销/清除所有用户的所有会话

如何在 Laravel 5.x 中注销过期会话?

Laravel - 注销特定用户

在春季安全中注销特定会话ID

Laravel 会话超时,额外的注销代码

如何在注销时取消设置特定的 php 会话