使用 Laravel 5.1& '文件'会话驱动程序,
我正在尝试为用户提供跟踪他们的会话的工具,并通过在数据库中保留他们session_id
的记录来随时使他们无效。对于数据库,我的意思是,我维护了一个名为user_sessions
的表,它将user_id
与session_id
(由Session::getId()
获得)相关联。
因此,为了使Session无效,我尝试了以下代码,
$sessionId = Session::getId();
Session::setId($sessionId);
Session::invalidate();
并且它非常适用于用户不使用“记住我”功能的情况。
对于用户使用记住我功能的情况,上面的代码无效,所以,我还尝试将remember_token
字段设置为{{ 1}}在this answer中指定,但是这样,用户的所有会话都会被销毁,包括当前的会话。
答案 0 :(得分:1)
您只需使用
即可use Illuminate\Support\Facades\Session;
Session::forget('YOUR_SESSION_ID');
如果您想获得当前会话ID:
Session::driver()->getId();
我希望它有所帮助
答案 1 :(得分:0)
会话意味着短暂的。如果你想要一些更永久的东西,你可以使用某种长期用户设置表。
创建表user_settings
:
id (PK), user_id(FK users table), settings(BLOB?), created_at, updated_at
添加模型:
class UserSetting extends Model {
public function user() {
return $this->belongsTo(User::class);
}
}
您还可以通过以下方式将用户与以下内容相关联:
class User extends Model {
//...
public function settings() {
$this->hasMany(UserSetting::class);
}
}
然后,您可以通过以下方式获取所有用户会话:
User::find($u)->settings();
当用户定期或通过记忆令牌自动登录时,会触发Login
事件。
您可以在您的活动服务提供商处收听:
\Event::listen(\Illuminate\Auth\Events\Login::class, function ($event) {
// Here you can load the last settings in the session if you want e.g.
session(['current_settings' => $event->user->settings()->latest()->value('id') ]);
// or you can just make a new entry:
$settings = new UserSettings();
$event->user->settings()->save($settings);
session(['current_settings' => $settings->id ]);
});
请注意,您必须手动保留需要持久保存的内容,而不是仅将其放入会话中。