gpt4 book ai didi

php - 如何获取 Yii2 中所有登录用户的列表?

转载 作者:行者123 更新时间:2023-12-04 15:50:57 25 4
gpt4 key购买 nike

我想在我的 yii2 应用程序中向管理员显示所有登录用户的列表。现在我正在使用一个 bool 变量'is_login',它在用户登录时设置,在用户注销时取消设置。现在的问题是,如果用户在未注销的情况下关闭浏览器,它将显示在登录用户中。如何仅显示活跃用户。

我不认为在每次点击或每当他/她在网站上做某事时存储用户事件是正确的方法,这会使网站过于繁琐?我想问一下 Yii2 中是否有任何标准方法或方式可用。

最佳答案

此处正确的方法是直接使用事件 session 列表。默认情况下 session 存储在文件系统中(每个都在自己的文件中)并且使用它们可能不方便。如果你使用 yii\web\DbSession 存储而不是默认的 yii\web\Session,这对你来说会容易得多。然后您将能够直接从数据库中查询所有 session 。

这里是 samdark的推荐:https://github.com/samdark/yii2-cookbook/issues/92

Could be solved by using DB sessions and writing additional info into the table:

'session' => [
'class' => 'yii\web\DbSession',
'writeCallback' => function ($session) {
return [
'user_id' => Yii::$app->user->id,
'last_write' => time(),
];
},
],

Then it's easy to work with it via SQL:

-- Get all users active in recent hour
SELECT user_id FROM session WHERE last_write - 3600 < :now;

P.S. 在使用此配置之前,您应该执行迁移以将 session 表添加到您的数据库并添加字段 user_id last_write

默认迁移在这个路径下:vendor/yiisoft/yii2/web/migrations

或者只是执行这样的事情(应该适用于你的情况):

CREATE TABLE session
(
id CHAR(40) NOT NULL PRIMARY KEY,
expire INTEGER,
data BLOB,
user_id INTEGER,
last_write TIMESTAMP
)

要了解有关 Yii2 session 的更多信息,请访问 this section Yii2 指南。

关于php - 如何获取 Yii2 中所有登录用户的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com