2015-01-27 3 views
1

Html5 login localstorage в течение нескольких дней. Этот сценарий входа в HTML5 использует localstorage для хранения пользователей, которые и все работают нормально. Но мне нужно добавить еще одну вещь. Я хочу, чтобы после входа пользователя в систему в первый раз приложение будет хранить информацию о пользователях в браузере html5 , например, через 30 дней, когда истечет 30 дней, пользователь будет перенаправлен обратно на логин снова. Может ли кто-нибудь помочь мне с этим? Спасибо.html5 login localstorage за сутки

<script> 

$(document).ready(function(){ 

    $('.send').click(function(){ 

     var uname=$('#uname').val(); 
     var pass=$('#pass').val(); 

     if(uname==""){ 

      $('.error').effect("bounce",500).fadeIn(400).html('Enter Your Username'); 

     } 

     else if(pass==""){ 

      $('.error').effect("bounce",500).fadeIn(400).html('Enter your password'); 

     } 

     else{ 


      $('.error').hide(); 
      var userdata= "uname="+uname+"&pass="+pass; 


      window.localStorage["uname"] = uname; 
      window.localStorage["pass"] = pass; 

      $("#loader").show(); 
      $("#loader").fadeIn(400).html('<img src="loader.gif" align="absmiddle">&nbsp;<span class="loading">Checking your details</span>'); 

      $.ajax({ 

       type:"post", 
       data:userdata, 
       url:"http://localhost/login.php", 
       cache:false, 
       success:function(msg){ 

        $("#loader").hide(); 
        $('.error').fadeIn(200).html(msg); 

       } 

      }); 



     } 
    }); 

}); 

</script> 
+0

Вы показываете только код для формы входа в систему на стороне клиента (javascript), поэтому вам сложно привести полный пример кода для решения. Одна вещь, которую вы должны сделать, это добавить 'window.localStorage [" lastSuccessfulLogin "] = new Date();' в вашу функцию успеха для входа. Это установит текущую дату. Затем вы проверите это в любой части вашего кода, который вы используете, чтобы проверить, находится ли пользователь в настоящий момент. – mason81

+0

Вы когда-нибудь разбирались? Вы видели обновление моего ответа (я исправил код)? – mason81

ответ

0

1) данные LocalStorage не истекут, как печенье. он будет оставаться таким же в течение многих лет. 2) если вы хотите установить дату истечения срока действия, добавьте дату истечения срока действия в качестве значения в localstorage, затем каждый раз извлекайте эту информацию и проверьте состояние, такое как количество дней, часов или месяцев. или 3) используйте cookie, где вы можете установить срок годности.

1

Просто устанавливается, когда данные установлены в LocalStorage (через другой переменной в нем), и каждый раз, когда приложение нагрузки, проверить это значение и сравнить его с текущей даты/времени.

+0

@ mason81, только что увидел ваш комментарий, в основном говоря то же самое полчаса назад. Почему бы вам не написать это как ответ? – Shomz

+0

Хорошая точка сэр. Полагаю, я мог/должен был это сделать. – mason81

+0

Да, я не хочу красть ваш ответ. – Shomz

2

Как я уже упоминал в комментарии (и Шомз упомянул в своем ответе), вам нужно установить текущую дату в локальном хранилище так же, как вы храните имя пользователя и пароль (вы уверены, что вам нужно сохранить пароль в локальном хранилище - не представляется необходимым), а затем проверить, установлено ли это значение и сравнить его с текущей датой.

Обновление: исправление кода (забыли преобразовать локальную дату хранения из строки обратно в объект даты, плюс у меня отсутствовала закрытая скобка, oops!).

jsfiddle с примером использования: http://jsfiddle.net/uqpywLv3/17/

<script> 

$(document).ready(function(){ 

    $('.send').click(function(){ 

     var uname=$('#uname').val(); 
     var pass=$('#pass').val(); 

     if(uname==""){ 
      $('.error').effect("bounce",500).fadeIn(400).html('Enter Your Username'); 
     } 

     else if(pass==""){ 
      $('.error').effect("bounce",500).fadeIn(400).html('Enter your password'); 
     } 

     else{ 
      $('.error').hide(); 
      var userdata= "uname="+uname+"&pass="+pass; 

      window.localStorage["uname"] = uname; 
      window.localStorage["pass"] = pass; 
      // is storing the password this necessary? 

      $("#loader").show(); 
      $("#loader").fadeIn(400).html('<img src="loader.gif" align="absmiddle">&nbsp;<span class="loading">Checking your details</span>'); 

      $.ajax({ 
       type:"post", 
       data:userdata, 
       url:"http://localhost/login.php", 
       cache:false, 
       success:function(msg){ 
        // store the current date 
        window.localStorage["ldate"] = new Date(); 

        $("#loader").hide(); 
        $('.error').fadeIn(200).html(msg); 
       } 
      }); 
     } 
    }); // end .send click handler 

    // check if the user is logged in 
    if (typeof window.localStorage["ldate"] != "undefined") { 

     // localstorage seems to store the date as a string 
     // so convert it to a date object 
     var memDate = new Date(window.localStorage["ldate"]); 

     var expDate = new Date(); // current date. 
     expDate.setDate(-30); // set to 30 days ago. 

     if (memDate > expDate) { 
      // user's last login still valid 
      // do whatever you think is appropriate here 
     } else { 
      // user's last login was past 30 days ago 
      // perhaps call function to log them out on server side 
      // and show login form? 
     } 
    } else { 
     // the user is not logged in. 
     // put your code for showing the login form here 
    } 
}); 

</script> 
+0

не работает. Кнопка отправки больше не доступна для кликов. любая дальнейшая помощь – Sectona

+0

@ Sectona - Трудно точно знать, не видя больше вашего кода (и как вы решили реализовать внутренние блоки условных обозначений внизу). Получаете ли вы какие-либо сообщения в консоли (например: тестирование в Chrome и использование Ctrl + Shift + J)? Единственное, что я изменил с помощью вашего обработчика кликов для кнопки отправки, было добавить 'window.localStorage [" ldate "] = new Date();' к функции успеха вашего вызова ajax. Я не думаю, что это повредит. – mason81

+0

@Sectona Я обновил свой ответ. Мне не хватало закрывающей скобки и забыл преобразовать дату локального хранилища обратно в объект даты (он хранится в виде строки). Я также добавил пример jsfiddle для тестирования. Это очень уродливо, хотя, извините. – mason81