0

我的 Yii 应用中有一个简单的页面跟踪系统。当用户查看单个项目时,我使用page_id, session_id,更新数据库time。我也有一个time_ended专栏,但我不确定更新这个字段的最简单方法是什么?

目前它非常简单,如下所示:

public function actionView($id) { // View a single item

// Load item
$model = Item::model()->loadItem($id); 

// load viewed item model
$viewedPage = new ViewedItem;
// set attributes
$viewedPage->page_id = $model->id;
$viewedPage->session_id = Yii::app()->session->sessionId;
$viewedPage->time_started = new CDbExpression('NOW()'); 
$viewedPage->save();

$this->render('view', array(
        'model' => $this->loadModel($id, 'Item'),
}

任何指导都会有所帮助。

谢谢

强尼

4

1 回答 1

3

由于 HTTP 是一种无状态协议,我们无法确定用户何时离开页面。但是有两种方法可以做到这一点。

  1. Javascript方法:当用户离开页面时触发事件“onbeforeunload”。您可以查找该事件,然后使用 $.post() 或 $.ajax() 执行将$time_ended针对该 current更新的操作session_id

  2. Yii 方法(代码):服务器端可以有一个脚本来检查每个会话。它将检查如果来自 a 的最后一个请求session_idx_second旧的,那么我们可以将最后一次记录为$time_ended

我认为任何这些都会很有用。

于 2013-09-13T08:20:09.173 回答