【发布时间】:2019-11-19 03:13:21
【问题描述】:
我一直在尝试使用 Date.Now() 和 Carbon::now() 等不同方法从服务器获取时间,但这种方法存在问题访问者是否可以轻松更改他/她的计算机时间,并且服务器的返回响应将根据访问者在计算机上的时间而变化。
这就是我真正想要做的事情
我在数据库中有 6 个不同的问题,我想在不同的日子展示。
例如:2019 年 11 月 20 日,我想展示问题 #1,而 2019 年 11 月 24 日,我想展示问题 #2
这里的问题是,如果访问者将他的日期更改为 11 月 24 日,他将能够提前看到问题,而我只希望他们在我在系统中指定的日期知道这个问题。
这就是我向我的 AJAX 调用发送回响应的方式。
public function getSer(Request $request)
{
$now = new DateTime('now',new DateTimezone('America/New_York'));
return response()->json($now);
}
返回的时间基于本地客户端时间,而不是服务器时间。
我还尝试了以下方法:
$question = Questions::where('question_start', '<=', Carbon::now('America/New_York'))->where('question_end', '>=', Carbon::now('America/New_York'))->first();
dd($question);
但是随着我在操作系统上更改日期,结果会发生变化
【问题讨论】:
-
您的用例是什么?您应该信任用户的日期和时间,但通过实施日期/时间检查来防止人们在服务器上做事。因此,如果他们请求的资源在特定时间之前不可用,那么您的服务器将返回 401 未授权,然后在满足日期/时间时返回 200。 UI 将阻止根据设备的时间显示此资源的选项。如果他们的时间不同步,哦,好吧。如果设备时间不正确,现在大多数东西都不起作用。
-
您在服务器上使用例如 PHP 创建的日期时间独立于客户端计算机。我确定您忘记了问题中的一些细节。
-
问题已更新,如有任何混淆,请检查并抱歉。
-
还是不清楚。
Date.Now()看起来像 JS,所以这意味着您使用客户端日期/时间。在 PHP(在服务器上)中,您将获得服务器时间。 -
您的 PHP/网络服务器是在您的计算机本地运行还是在远程服务器上运行?