Сеансы Gorilla хранятся в localStorage

Сеансы Gorilla работают довольно хорошо, сохраняя данные сеанса в зашифрованном виде в файле cookie.

Но можно ли использовать localStorage вместо cookie jar. Конечные точки будут возвращать JSON со свойством session. Код внешнего интерфейса сохранит session в localStorage. Когда будет запрошена конечная точка, в заголовке будет передано session.

Я могу зашифровать/расшифровать/подписать/проверить сеанс с помощью https://github.com/gorilla/securecookie.

  1. Интересно, можно ли использовать localStorage вместо cookie, как я описал? (Я ожидаю, что да, но может быть есть причина не делать этого)

  2. Если да, то такое решение уже существует?

Если вы задаетесь вопросом «почему?» Я хочу явно обрабатывать сеанс. Файлы cookie не всегда сохраняются, когда запрашиваются веб-службы в разных доменах.


person user3130782    schedule 24.08.2018    source источник


Ответы (1)


Во-первых, да, это возможно.

Во-вторых, это очень легко сделать.

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

Итак, вот что я подумывал о том, чтобы отчасти сделать, я имею в виду, что я просто использую здесь псевдокод, потому что раньше я даже не пытался использовать Go. JavaScript несколько лучше реализован, так как у меня большой опыт работы с JavaScript, но вы можете изменить его, кто знает?


Псевдокод серверной части:

@GET
@Path("/getsession")
getSession () { return session; }

@POST
@Path("/setsession")
setSession (json) { session = validateSession(json); }

Псевдокод JavaScript:

$.ajax(
    url:"/getsession",
    type: "GET",
    success: function (data) {
        var session = JSON.stringify(data);
        localStorage.setItem("session", session);
    }
);


var storedSession = localStorage.getItem("session");

if (storedSession != null) {
    storedSession = JSON.parse(storedSession);

    $.ajax(
        url:"/setsession",
        type: "POST",
        data: storedSession,
        success: function () {
            console.log("success!");
        }
    );
}
person JO3-W3B-D3V    schedule 24.08.2018