0

我怎样才能让用户单击一个页面的链接并且只能查看该页面一小时?

在一小时结束时,我想关闭选项卡/窗口或将用户发送到另一个页面。

我使用 CodeIgniter 作为我的框架。

如何才能做到这一点?

4

2 回答 2

1

你不能在你的视图中放置一个元刷新,将用户移动到你想要的任何页面吗?

这些方面的东西:

<meta http-equiv="refresh" content="3600; url=http://example.com/">

如果您想关闭窗口/选项卡,我想您可以使用一些 javascript

<script>
    setTimeout(360000, function(){
        window.top.close();
    });
</script>

如果那个脚本没有做它应该做的事情,请原谅我,我已经很长时间没有使用这样的东西了。

于 2012-04-13T20:41:58.807 回答
0

这可以使用 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 或其他计划的事件来清理过期的令牌,以节省您的客户删除旧记录所需的额外时间。根据您网站的大小,这个时间可能很长。

于 2012-04-13T16:33:37.443 回答