【问题标题】:Kill duplicate Sessions on Server in Laravel 5.2在 Laravel 5.2 中杀死服务器上的重复会话
【发布时间】:2016-04-05 00:32:43
【问题描述】:

这是关于什么的?

数据库会话驱动程序现在包含 user_id 和 ip_address,因此您可以轻松清除给定用户的所有会话。

有什么问题

I checked this Article while reading what's new in Laravel 5.2

是否有任何博客清楚地解释了如何注销使用多个 IP 地址或使用多个浏览器通过相同 IP 地址创建的重复会话?

【问题讨论】:

    标签: laravel session laravel-5 laravel-artisan laravel-5.2


    【解决方案1】:

    据我所知,这没有什么困难。

    此表中的示例数据如下所示:

    所以这里有user_id、浏览器和上次活动时间戳。因此,如果您愿意,现在可以添加到 cron,例如运行以下查询:

    select user_id, count(*) AS `total` FROM sessions GROUP by user_id HAVING count(*) > 1
    

    这将为您的用户提供多个会话,您将能够决定如何处理他们。例如,您可以删除这些用户的所有会话,或者只保留最后一个会话并删除所有其他会话。当然,这取决于你。

    当您从数据库中删除记录时,用户将需要再次登录,例如上面如果我删除了我的 Firefox 会话,我需要再次登录 Firefox 才能登录我的帐户。

    编辑

    请注意,默认情况下没有sessions 表(因为许多用户不会使用database 驱动程序进行会话)。要创建此表,您需要运行:

     php artisan session:table
    

    以上命令将创建会话迁移

    然后你需要运行

     php artisan migrate
    

    将此迁移应用到数据库中

    【讨论】:

    • @Helper 也许你不应该在users 表中它会是UserID 而这里是user_id
    • 我假设你设置了.env 文件SESSION_DRIVER=database(默认为SESSION_DRIVER=file
    • 如果我必须删除那些不属于当前登录用户的记录,那么我将如何识别呢?我的意思是,假设 user_id 发生了 2 次,那么我将如何知道我必须删除哪一个。我之所以问这个问题,是因为有可能有人尝试通过网页抓取代码使用相同的帐户登录......所以同一用户可能有很多记录。
    • 正如我所说,在 cron 运行我展示的查询,然后对于结果集,您可以做任何您想做的事情 - 此查询将获取所有用户的记录(而不是当前用户的记录,因为在 cron 中有不会是任何登录用户)
    • 能否避免在会话表中创建重复的用户会话记录?会话配置文件中是否有这样做的标志?
    猜你喜欢
    • 2010-09-08
    • 2016-04-20
    • 2016-10-08
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2016-09-26
    • 2018-02-24
    相关资源
    最近更新 更多