2012-04-13 5 views
0

Как я могу позволить пользователю щелкнуть ссылку на страницу и получить доступ к этой странице только один час?Срок действия веб-страницы

В конце часа я хочу либо закрыть вкладку/окно, либо отправить пользователя на другую страницу.

Я использую CodeIgniter как свою структуру.

Как это можно сделать?

+0

Как вы планируете предотвращать скриншот/печать? – ceejayoz

ответ

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 или другое запланированное событие, чтобы очистить просроченные жетоны, чтобы спасти своих клиентов от дополнительного времени это займет, чтобы удалить старые записи. В зависимости от размера вашего сайта это время может быть значительным.

+0

Ничего из этого не касается «Я бы хотел закрыть вкладку/окно или отправить пользователя на другую страницу». – ceejayoz

1

Не можете ли вы поставить метаобъявление в своем представлении, которое переместит пользователя на любую страницу, которую вы хотите?

Что-то вдоль этих линий:

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

Если вы хотите закрыть окно/вкладку Я полагаю, вы могли бы использовать немного JavaScript

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

Прости меня, если этот сценарий не делает точно, что нужно, это было очень долго, так как я использовал что-то подобное.

Смежные вопросы