Данные в LocalStorage перезаписываются при входе из второго окна в localhost - PullRequest
0 голосов
/ 18 мая 2018

Когда на отправить (index.html) я делаю следующее ajax Мне нужно сохранить пользовательских данных в localStorage ,поскольку я перенаправляю на другой маршрут , он не будет иметь данных , если только.Это все работает нормально, но когда я открываю страницу в новом localhost окне и я login снова мои старые данные в localStorage перезаписываются.

Почему это происходит?

// Login index.js 
$('#frm-login').submit(function (e) {
    event.preventDefault()
    $('button').text('Please wait ...').prop('disabled')
    $.ajax({
        url: "/login-user",
        type: "POST",
        data: $('#frm-login').serialize(),
        dataType: "json"
    }).always(function (response) {
        $('button').text('Logging in').prop('disabled')
        console.log("Login", response)
        if (response.status == "error") {
            $('button').removeClass('lime').addClass('red').text('Log in failed. Try again.');
            return
        }
        if (response.token) {
            localStorage.setItem('token', response.token);
            console.log(localStorage.token)
            if (localStorage.token) {
                $.ajax({
                    type: "GET",
                    url: "/verify-user",
                    headers: {
                        'Authorization': 'Bearer ' + localStorage.token
                    },
                    dataType: "json"
                }).always(function (response) {
                    console.log("Auth", response)
                    if (response.status == "error") {
                        $('button').removeClass('lime').addClass('red').text('Log in failed. Try again.');
                        return
                    }
                    if (response.status == 302) {
                        console.log(response)
                        $jUser = response.responseJSON.authData.user
                        $sjUser = JSON.stringify($jUser);
                        localStorage.setItem('user', $sjUser);
                        $(location).attr('pathname', '/LIMELine/chatroom/')
                    }
                })
            }
        }
    })
})

Получение данных из localStorage main.js

$jUser = JSON.parse(localStorage.user)
$('#frame #sidepanel #profile-img').attr('src', $jUser.avatar)
$('#frame #sidepanel #profile .wrap #full-name').text($jUser.first_name + ' ' + $jUser.last_name)

1 Ответ

0 голосов
/ 18 мая 2018

localStorage используется всеми вкладками для данного домена.Если вы не хотите, чтобы это имело место, вы можете использовать sessionStorage вместо этого.Однако, как побочный эффект использования sessionStorage, данные будут уничтожены, когда закрывается окно / тег, с которым они связаны.

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

Только для чтенияСвойство localStorage позволяет получить доступ к объекту Storage для источника документа;сохраненные данные сохраняются между сеансами браузера.localStorage аналогичен sessionStorage, за исключением того, что, хотя данные, хранящиеся в localStorage, не имеют срока действия, данные, хранящиеся в sessionStorage, очищаются по окончании сеанса страницы, то есть при закрытии страницы.

https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

Свойство sessionStorage позволяет получить доступ к объекту хранения сеанса для текущего источника.sessionStorage похож на Window.localStorage;единственное отличие заключается в том, что данные, хранящиеся в localStorage, не имеют установленного срока действия, а данные, хранящиеся в sessionStorage, очищаются по окончании сеанса страницы.Сеанс страницы длится до тех пор, пока браузер открыт и сохраняется после перезагрузки и восстановления страницы.Открытие страницы в новой вкладке или окне приведет к инициированию нового сеанса, который отличается от того, как работают сеансовые куки.

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