2013-05-17 2 views
0

Мне нужно создать регистрацию и страницу входа с javascript и localstorage, и я очень смущен несколькими вещами.создание регистрационных и логинных страниц с localstorage

Предположим, что вся информация, которую нужно сохранить, является строкой, и я хочу, чтобы массив этих строк хранился локально, который может расти в любое время и до тех пор, пока он не очищается, он продолжает расти. Мне нужно проанализировать этот массив позже и сравнить строки со строкой, которая будет введена на странице входа. Как создать массив строк в локальном хранилище и получить к нему доступ? Я пробовал следующее: localstorage.token = JSON.stringify(token);, но каждый раз, когда появляется новый токен, он записывает его. Я прочитал несколько сообщений, но я все еще немного смущен.

спасибо.

+0

Можете ли вы показать больше своего кода? Да, вы можете сериализовать свою форму и сохранить эту строку в localstorage; вы сможете заполнить все поля из этого кеша, сначала отменив его. Но я признаю, что я немного потерял, почему вы пытаетесь сериализовать _token_. – raina77ow

+0

немного сложно показать вам мой код, он использует несколько нестандартных фреймворков. Основная проблема заключается в том, что я не понимаю, как работает localstorage. как определить сериализованный localstorage как для добавления пользователей в любое время, так и для анализа и поиска пользователя. Я ленив и соединяю userNamePassword вместе как одну строку, так что мне не нужно беспокоиться об этом слишком много. это просто основы. –

+0

Хорошо, проверьте [эту скрипку] (http: // jsfiddle.net/3pfgw /) (попробуйте ввести некоторые данные, затем нажмите «Сохранить», затем введите некоторые данные еще раз, а затем обновите страницу). Это то, что вы хотите? – raina77ow

ответ

1

Ну, токен - это строка в вашем случае, поэтому, если вы ее укорачиваете, ее значение изменится.

Вам не нужно, так просто сделать:

localStorage.token = token; 

Вы должны использовать JSON.stringify только для типов объектов:

var t = {a: 5, b: 'Tom'}; 

// set 
localStorage.special = JSON.stringify(t); 

// get 
var u = JSON.parse(localStorage.special); 
console.log(u.a); // 5 
console.log(u.b); // 'Tom' 

EDIT: О регистрационном процессе/логин: http://jsfiddle.net/NAzZ5/

+0

Erm ... я пропущу что-то очевидное, или вы действительно предлагаете хранить пароли в localStorage? – raina77ow

+0

Я немного смущен. что делает localStorage.token? видимо, мой localStorage.token срабатывает, чтобы быть правдой. Меня смущает то, как работает localStorage, что означает .token, .sha1_pwd и т. Д. это массивы? как его очистить и начать с 0? –

+0

Это была плохая идея :) Только сохранить токен лучше. – Menencia

1

Хорошо, хотя он по-прежнему грубый по краям, вот некоторые proof of concept:

HTML:

<form> 
    <input name='abc' value='' /> 
    <input name='def' value='' /> 
    <input name='ghi' value='' /> 
    <button type="button">Save</button> 
</form> 

JS:

$(function() { 
    var $form = $('form'), 
     $saveBtn = $('button'), 
     myForm = {}, 
     myFormJsoned = localStorage.getItem('myform'); 

    if (myFormJsoned) { 
     try { 
      myForm = JSON.parse(myFormJsoned); 
      $.each(myForm, function(i, obj) { 
       $form[0][obj.name].value = obj.value; 
      }); 
     } 
     catch(e) { 
      localStorage.removeItem('myform'); 
     } 
    } 
    $saveBtn.click(function() { 
     localStorage.setItem('myform', 
      JSON.stringify($form.serializeArray())); 
    }); 
}); 

Дело в том, когда эта кнопка нажата, форма сериализации в массив с этим помогает метод JQuery (из Конечно, использование serialize было бы еще более простым - если бы были доступны unserialize). Затем он JSONed и сохраняется в одном поле localStorage.

При загрузке страницы процесс обратный: JSON анализируется в Array of Objects (результат jQuery.serializeArray), этот AoO вставляется в форму обратно (с использованием удобства $.each).

В чем заключается концепция, вы можете спросить? Я хочу сказать, что возможно работать с localStorage, как с контейнером с одной строкой, например с файлом cookie. Но опять же, я бы подумал об использовании отдельного контейнера для каждого из полей:

localStorage.setItem('myform_abc', $form[0].abc.value); 
localStorage.setItem('myform_def', $form[0].def.value); 
localStorage.setItem('myform_ghi', $form[0].ghi.value); 
+0

Теперь давайте скажем, что у вас есть только 1 вход: 'var token = String (Something)' n. Эта строка будет храниться локально легко, как этот 'localStorage.token = токен'. как я могу перебирать все значения, хранящиеся в 'localStorage.token', поэтому я могу выполнить сравнение? для части входа я имею в виду. –

+1

Unserialize этот токен в 'Array' (если вы использовали' JSON.stringify' для tokenize его, 'JSON.parse', чтобы вернуть его), затем перебираем этот массив с помощью' $ .each' или просто 'for (var i = 0, l = arr.length; i raina77ow

+0

Думаю, я понял, я буду держать вас в курсе. благодарю вас за терпение, мне очень сложно объяснить мою ситуацию, не показывая массивный код. –

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