网页过期

时间:2012-04-13 16:24:37

标签: codeigniter

如何让用户点击指向某个页面的链接,并且只能查看该页面一小时的访问权限?

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

我正在使用CodeIgniter作为我的框架。

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

您是否可以在视图中放置元刷新,以便将用户移动到您想要的页面?

这些方面的东西:

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

如果您要关闭窗口/标签,我想您可以使用一点点javascript

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

请原谅我,如果那个剧本没有完全应该做的那样,那我用了很长时间就已经很久了。

答案 1 :(得分: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或其他预定事件来清理过期的令牌,以便从删除旧记录所需的额外时间中保存客户端。根据您网站的大小,这个时间可能很长。