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