php - Laravel 5.0 显示登录访客和注册用户

标签 php html mysql session laravel

我正在尝试向我的网站添加一个功能,显示登录访客和注册用户的数量(也显示注册用户的姓名,但我可以弄清楚那部分)。目前,我已经读到我需要更改/config/Session.php 文件 'driver' 以使用 database 而不是 file ('driver' => env('SESSION_DRIVER', '数据库'),).我找到了一篇使用 Sentry 来完成此操作的文章 ( http://laravel.io/forum/03-03-2014-sentry-3-users-online ),但是,我更愿意在不需要第三方文件的情况下执行此操作。尽管如此,我还是以他的信息为起点,开始使用 session 模型。

至于问题,首先,即使在修改 Session.php、创建表并迁移它之后,我也无法真正让 session 开始保存在我的数据库“ session ”表中。它仍然保存在/storage/framework/session/中的文件中(我仍然可以使用 Session::all() 登录并显示 session 信息)。

mysql> select * from sessions;
Empty set (0.00 sec)

第二个问题,如果他的文件中不存在 session ,我不知道如何创建 session ,无法创建(如果有人只是打开网站,因此是访客)也不会在用户注销时注销用户(删除他们的登录状态以及他们的 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
    }

}

如果有人有任何信息可以帮助我解决这些问题,我将不胜感激。如果您需要更多信息,请告诉我,我会尽快回复。

谢谢。

最佳答案

针对第一个问题,Laravel 仍然将session 保存在/storage/framework/session/

如果您按如下方式更新了 session.php 文件:

env('SESSION_DRIVER', 'database')

确保你也更新了你的 .env 文件

SESSION_DRIVER=database

关于php - Laravel 5.0 显示登录访客和注册用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464301/

相关文章:

mysql - 所需产品选项 laravel

mysql - 日期查询 MySQL

php - 如何使用 RegEx 确定分隔符之间的最大块?

php - 从 AJAX/php 文件返回变量

php - Prestashop PHP 包含在 .tpl 中不起作用

php - Laravel 中使用 Eloquent 的存储库模式

javascript - 根据存储在数组中的坐标确定在 Canvas 上绘制的形状

javascript - 在 Angular 应用程序中运行 jQuery 函数

javascript - 将多个 TD 插入表的中间

python - 如何使 python 对象 json 序列化?