Laravel 5.0 显示登录客人和注册用户
Posted
技术标签:
【中文标题】Laravel 5.0 显示登录客人和注册用户【英文标题】:Laravel 5.0 show logged in guests and registered users 【发布时间】:2015-10-06 11:52:23 【问题描述】:我正在尝试向我的网站添加一个功能,该功能显示登录的客人和注册用户的数量(也显示注册用户的姓名,但我可以弄清楚那部分)。目前,我已经读到我需要更改 /config/Session.php 文件“驱动程序”以使用 database
而不是 file
('driver' => env('SESSION_DRIVER', 'database'),
)。我发现一篇文章使用 Sentry 来完成此操作 (http://laravel.io/forum/03-03-2014-sentry-3-users-online),但是,我更愿意在不需要第三方文件的情况下执行此操作。尽管如此,我还是以他的信息为起点,现在使用模型进行会话。
至于问题,首先,即使在修改 Session.php、创建表并迁移它之后,我也无法真正让会话开始保存在我的数据库“会话”表中。它仍然保存在 /storage/framework/session/ 中的文件中(我仍然可以使用Session::all()
登录并显示会话信息)。
mysql> select * from sessions;
Empty set (0.00 sec)
第二个问题,如果他的文件中不存在会话,我不知道如何创建会话,则无法创建(如果有人只是打开站点并因此成为访客)也不会在用户注销时取消注册(删除他们的登录状态以及他们的 user_id,以便他们被视为访客)。
这是我当前的 OnlineUser.php 文件:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
// use Sentry;
use Session;
use Auth;
class OnlineUser extends Model
/**
* @inheritDoc
*/
public $table = 'sessions';
/**
* @inheritDoc
*/
public $timestamps = false;
/**
* Returns all the guest users.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeGuests($query)
return $query->whereNull('user_id');
/**
* Returns all the registered users.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeRegistered($query)
return $query->whereNotNull('user_id')->with('user');
/**
* Updates the session of the current user.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeUpdateCurrent($query)
return $query->where('id', Session::getId())->update(array(
'user_id' => !empty(Auth::user()) ? Auth::user()->id : null
));
/**
* Returns the user that belongs to this entry.
*
* @return \Cartalyst\Sentry\Users\EloquentUser
*/
public function user()
return $this->belongsTo('\App\User');
//return $this->belongsTo('Cartalyst\Sentry\Users\EloquentUser'); # Sentry 3
// return $this->belongsTo('Cartalyst\Sentry\Users\Eloquent\User'); # Sentry 2
如果有人有任何信息可以帮助我解决这些问题,我将不胜感激。如果您需要更多信息,请告诉我,我会尽快回复。
谢谢。
【问题讨论】:
【参考方案1】:针对第一个问题,Laravel 仍然将会话保存在 /storage/framework/session/ 中
如果您按如下方式更新了 session.php 文件:
env('SESSION_DRIVER', '数据库')
确保您还更新了 .env 文件
SESSION_DRIVER=数据库
【讨论】:
抱歉回复晚了;从那以后,我一直在研究其他部分。这让数据库正常工作......现在我只需要弄清楚如何从会话中获取用户的 id 或将用户的 id 保存到它似乎不想做的会话表中。以上是关于Laravel 5.0 显示登录客人和注册用户的主要内容,如果未能解决你的问题,请参考以下文章