Чтение из localStorage, передача его на сервер через JSON и создание сеанса из него в MVC3 - PullRequest
0 голосов
/ 09 декабря 2011

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

Просто чтобы установить, что происходит на стороне сервера, это что-то похожее на iGoogle, где список URL-адресов предоставляется пользователем, и он вернет веб-страницу, содержащую прокручиваемую стену iFrames этих URL-адресов.Если они вошли в систему с фактической учетной записью, их данные сохраняются в базе данных, а также в сеансе, и если они вошли в качестве гостя, их данные хранятся локально, а также в сеансе.Вероятно, это снова можно оптимизировать, чтобы уменьшить зависимость от серверной части переменной сеанса, но я вначале сосредоточился на том, чтобы она работала, а затем я могу оптимизировать ее.

Представление: (по-прежнему содержит некоторый код отладки)

<div id="LocalStorageStatus"></div>
    <script type="text/javascript">
        var isGuest = false;
        if (Modernizr.localstorage) {
            $('#LocalStorageStatus').html('<button type="input" onclick="guest()" id="guest">Log in as guest</button>');
            function guest() {
                localStorage["Guest"] = true;
                var URLarray = new Array();
                if(localStorage["URL"] != "0")
                {
                    for(var i = 0; i < localStorage["URL"]; i++)
                        URLarray[i] = localStorage["URL" + i];
                }

                var data = {
                       ID : 'local',
                       URL: localStorage["URL"],
                       URLList : URLarray,
                       Template: localStorage["Template"]};

                $.ajax({
                    url: '@Url.Action("Guest","Login")',
                    data: JSON.stringify(data),
                    success: function () { alert("YOU ARE A GUEST!") },
                    error: function () { alert("YOU ARE NOT A GUEST!") },
                    type: 'POST',
                    contentType: 'application/json, charset=utf-8',
                    dataType: 'json'
                });
            }

        }
        else {
            $('#LocalStorageStatus').html('Guest log-in requires an HTML5-compatible browser.');
        }
    </script>

Модель:

public class GuestUser
{
    public string ID { get; set; }
    public int URL { get; set; }
    public List<string> URLList { get; set; }
    public int Template { get; set; }
}

Контроллер: (Для временного представления, которое устанавливает сеанс перед перенаправлением его в область для вошедших в систему пользователей)

[HttpPost]
public ActionResult Guest(GuestUser guest)
{
    Session.SetDataInSession("ID", guest.ID);
    return RedirectToAction("../Frames");
}

Сейчас кажется, что создание и передача объекта JSON, кажется, просто прекрасны, хотя он возвращает ошибку, несмотря на установку идентификатора сеанса, но я не хочу продолжать отсюда, пока не узнаю, что объект JSON находится в процессепостроен так, как я хочу.Будет ли это работать с тем, как я это реализовал и совершил ли я какие-либо серьезные злодеяния в процессе?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...