全局会话变量似乎无法更新其值-Laravel 5.8

时间:2019-08-15 15:28:53

标签: php laravel

我正在运行一个laravel应用,该应用在页面加载时向控制器中的此函数reload_time()发送ajax请求,以获取页面加载时的当前时间戳

protected function time_stamp() {
  $dt = time();
  $value = strftime("%Y-%m-%d %H-%M-%S", $dt);
  return $value;
}
public function reload_time() {
 session(['reload_time' => $this->time_stamp()]);
 return Response::json(session('reload_time')); 
}

我正在我的应用程序上运行一个通知系统,并且我使用此时间戳来区分页面重新加载时间之后的新通知和页面重新加载时间中的旧通知。

这是我的通知功能:

public function get_newer_notification(Request $request) {
  $user = Auth::guard('tpuser')->user();
  $skip = $request->skip;
  $next_skip = $skip + 10;
  $notification = tpNotification::where('user_key',$user->key)
                  ->where('delete',1)
                  ->where('created_at','>', session('reload_time'))
                  ->skip($request->skip)
                  ->take(10)
                  ->orderby('created_at','desc')
                  ->get();
   $num = $notification->count();
   $num >= 10 ? $next_skip = $skip + 10 : $next_skip = $skip + $num;
   $response = [
                'collection' => $notification, 
                'next_href' => "notification/{$next_skip}/newer", 
                'reload_time' => session('reload_time')
               ];
return Response::json($response); 
}
public function get_older_notification(Request $request) {
  $user = Auth::guard('tpuser')->user();
  $skip = $request->skip;
  $notification = tpNotification::where('user_key',$user->key)
                  ->where('delete',1)
                  ->where('created_at','<=',session('reload_time'))
                  ->skip($request->skip)
                  ->take(10)
                  ->orderby('created_at','desc')
                  ->get();
   $num = $notification->count();
   $num >= 10 ? $next_skip = $skip + 10 : $next_skip = $skip + $num;
   $response = [
                'collection' => $notification, 
                'next_href' => "notification/{$next_skip}/older", 
                'reload_time' => session('reload_time')
               ];
 return Response::json($response); 
}

所以我面临的问题是我的reload_time()函数返回当前时间戳,但是我的get_newer_notification()get_older_notification()函数的响应却没有携带相同的当前时间戳值,但重新加载前一页的时间戳记值较旧。

但是在几次重新加载(可能是4或5)之后,两个通知函数都返回与reload_time()相同的值。似乎几乎是某种缓存或缓慢的会话处理,但我需要一种解决方案。

1 个答案:

答案 0 :(得分:0)

是否可以放弃所有时间戳检查,而仅将has_been_viewed布尔值添加到通知数据库表中?

因此,当创建新通知时,has_been_viewed将默认为false。然后,当页面被加载/重新加载并且请求新的通知时,请使用has_been_viewed = false查找所有通知,并将它们设置为true,然后再返回它们。