我怎样才能让用户单击一个页面的链接并且只能查看该页面一小时?
在一小时结束时,我想关闭选项卡/窗口或将用户发送到另一个页面。
我使用 CodeIgniter 作为我的框架。
如何才能做到这一点?
我怎样才能让用户单击一个页面的链接并且只能查看该页面一小时?
在一小时结束时,我想关闭选项卡/窗口或将用户发送到另一个页面。
我使用 CodeIgniter 作为我的框架。
如何才能做到这一点?
你不能在你的视图中放置一个元刷新,将用户移动到你想要的任何页面吗?
这些方面的东西:
<meta http-equiv="refresh" content="3600; url=http://example.com/">
如果您想关闭窗口/选项卡,我想您可以使用一些 javascript
<script>
setTimeout(360000, function(){
window.top.close();
});
</script>
如果那个脚本没有做它应该做的事情,请原谅我,我已经很长时间没有使用这样的东西了。
这可以使用 cookie 进行。这个想法是使用您存储在数据库中的访问令牌和时间戳创建一个 cookie。
因此,当用户访问您的数据库时,您会创建一个随机字符串并将其插入数据库。使用 CodeIgniter,这可以通过类似的方式来完成
$this->load->helper('string');
$tokenKey = random_string('alnum', 32);
$this->db->insert('tokens', array('userid' => $userid, 'key' => $tokenKey));
该tokens
表还应包含创建令牌时的时间戳。这是因为即使我们在 cookie 中添加了过期时间,仍然可以对其进行修改,因此如果我们没有这种双重检查,用户可能会获得对页面的永久访问权限。
现在是时候实际设置cookie了。我们将其过期时间设置为现在 + 3600 秒(从现在起一小时)。
setcookie('tokenKey', $tokenKey, time()+3600, '/');
每当用户尝试访问您的受保护页面时,您可以删除所有超过一小时的令牌(以确保您没有存储过期的令牌),然后查看该令牌是否存在于您的表中。如果是这样,它不到一个小时。
// delete old tokens
$tokenKey = $_COOKIE['tokenKey'];
// select token from database
或者,您可以有一个 cronjob 或其他计划的事件来清理过期的令牌,以节省您的客户删除旧记录所需的额外时间。根据您网站的大小,这个时间可能很长。