Как правильно написать скрипт с использованием cookie, который скрывает кнопку для нажавшего пользователя «навсегда»?
Зачем прикручивать cookie, если есть local/sessionStorage?
Немного разширили задачу.
Пользователь заходит на сайт. Записывается дата посещения в Cookie. Под кнопкой выводиться дата окончания бесплатного периода, которая считается от даты посещения +2 дня, для каждого зашедшего. После того, как прошли 2 дня с момента посещения или файл был скачан (нажата кнопка), текст даты и кнопка больше не показываются.
Решение:
https://jsfiddle.net/pb89nhvk/9/
На основании https://github.com/js-cookie/js-cookie$(function(){
	
  var 
  	free_btn = $('#free_btn'),
    time_off = $('#time_off');
  
  free_btn.click(function(){
    setTimeout(function(){ 
       //downloadFile('/uploads/test.zip'); 
       
     },15000)
     
     if (Cookies.get('free_period1')) {
       var date_off = new Date(Cookies.get('free_period1'));
       date_off.setDate(date_off.getDate() - 3);

       Cookies.set('free_period1', date_off, { expires: 365, path: '/' });



     } else {
       // узнаем текущую дату
       var curr_date = new Date();
       // добавляем к ней 2 дня
       curr_date.setDate(curr_date.getDate() - 2);
       // записываем в куки на +1 год
       Cookies.set('free_period1', curr_date, { expires: 365, path: '/' });
     }

    free_btn.hide();
    time_off.hide();
      
  })

  if (Cookies.get('free_period1')) {
		
    /* Повторный заход пользователя */
    
    
  	
    // берем куку даты 1 захода
    var date_off = new Date(Cookies.get('free_period1'));
    // берем текущую дату
    var curr_date = new Date();
    
    
    // выводим дату окончания пользователю
    var date_off_month = date_off.getMonth() + 1;
    if (date_off_month < 10) date_off_month = '0'+date_off_month;
    
    var date_str = date_off.getDate()+"."+date_off_month+"."+date_off.getFullYear()
    time_off.find('span').text(date_str);
          
    // сравниваем текущую дату и дату окончания периода
    // если текущая дата меньше, то показываем кнопку и текст
    if (curr_date<date_off) {
			free_btn.show();
    	time_off.show();
  	}
    
  } else {
  
  	/* Первый заход пользователя */
    
    // узнаем текущую дату
  	var curr_date = new Date();
    // добавляем к ней 2 дня
    curr_date.setDate(curr_date.getDate() + 2);
    // записываем в куки на +1 год
		Cookies.set('free_period1', curr_date, { expires: 365, path: '/' });
    
    
    
    
    // выводим дату окончания пользователю
    var date_off_month = curr_date.getMonth() + 1;
    if (date_off_month < 10) date_off_month = '0'+date_off_month;
    
    var date_str = curr_date.getDate()+"."+date_off_month+"."+curr_date.getFullYear()
    time_off.find('span').text(date_str);
    
    
    // показываем кнопку и текст
    free_btn.show();
    time_off.show();
    
  }
  
})
главное не забудьте прописать в CSS#free_btn, #time_off {
	display:none
}
HTML<button id="free_btn">Free</button>
<div id="time_off">
  Бесплатный период заканчивается: <span></span>
</div>