我正在编写以下代码以从管理系统注销特定用户。
我有会议桌我正在关注此链接:https://laravel.com/docs/5.2/session
$User = $this->Get($obj);
$UserSession = SessionModel::where('user_id', $obj->UserID)->first();
if($UserSession != null) {
$UserSession->user_id = null;
$UserSession->payload = null;
$UserSession->save();
}
这样做是否正确?
您可以在一行代码中真正清理它:
$deleted = SessionModel::whereUserId($obj->UserID)->delete();
// Returns the number of deleted sessions.
return $deleted;
删除属于某个用户的所有会话记录将使该用户退出其拥有的所有会话。
例如,如果用户在手机和电脑上登录了您的应用程序,他们将在这两台设备上注销。
$User = $this->Get($obj);
$UserSession = SessionModel::where('user_id', $obj->UserID)->first();
if($UserSession != null) {
$UserSession->user_id = null;
$UserSession->payload = null;
$UserSession->save();
}
您必须注意,如果用户使用许多不同的浏览器登录,则is用户可以拥有更多的会话记录
=>解决方案:获取sessions表中具有给定user_id的所有行并将其删除。使用有用的收集方法
$User = $this->Get($obj);
// Get Collection Object
$UserSessions = SessionModel::where('user_id', $obj->UserID)->get();
if($UserSession != null) {
// Use each method on Collection Object
$UserSessions->each(function($UserSession){
$UserSession->delete();
});
}
您可能会认为Session表中的user_id应该是可为null的,并且有一个默认的null值,因为未登录的用户没有用户id。那么您的迁移可能会有这一行。
$table->integer('user_id')->unsigned()->nullable()->default(null);
然后删除该表中特定用户的行将删除该用户会话。