2015-10-26 7 views
0

Я использую fetch() отправить пост запрос для входа в систему, после проверки сервера, я использую req.session.account = account[0]; для сохранения информации об учетной записи на сессию и возвращает перенаправление URL,Session потерял после перенаправления

Но после редиректа, то информация учетной записи в сеансе потеряна, почему?

+0

Просьба поделиться более подробной информацией, особенно об ошибках. – jkalden

+0

просто теряют информацию об учетной записи в сеансе, я не могу получить информацию об учетной записи через 'req.session.account' после перенаправления. – Showonne

+0

Посмотрите на [как спросить] (http://stackoverflow.com/help/how-to-ask). Ваш вопрос довольно неспецифичен ... – jkalden

ответ

0

Если у вас есть пример кода, это поможет нам отследить проблему. Моя первая мысль была бы, чтобы убедиться, express-session настроен правильно:

var app = express(); 
var session = require('express-session'); 

app.use(session({ 
    secret: 'ibfiyegfiyegfe' // Secret is a required option. 
})); 

Для подробной опций конфигурации см express-session repository.

EDIT: На основании дополнительной информации, я предполагаю, что у вас есть экспресс-сессия, настроенная так же, как и использование файлов cookie для управления сеансами. Это означает, что для каждого HTTP-запроса Express отправляет ответ, включающий cookie. . На основе JQuery AJAX звонки будут игнорировать куки ответ однако, что вызывает последовательные запросы Выразить выглядеть так, как будто вы никогда не вошли в систему, чтобы разрешить сохранение куки при выполнении AJAX запросов с JQuery, используйте xhrFields поле для включения withCredentials:

$.ajax({ 
    url: "http://....", 
    type: "POST", 
    xhrFields: { 
     withCredentials: true 
    }, 
    data: {username: username, password: password}, 
    success: function(responseBody) { 
     console.log("success!"); 
    }, 
    error: function(responseBody) { 
     console.log("error!"); 
    } 
}); 

Надеюсь, это поможет.

0

Извините, но я не ставил вопрос ясно.

Я использую метод fetch() отправлю запрос на вход в систему.

fetch('/logon', { 
     method: 'post', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ 
      account: account, 
      password: password 
     }) 
    }).then(function(response){ 
     return response.json(); 
    }).then(function(json){ 
     if(json.success == 1){ 
      window.location.href = json.redirecturl; 
     }else{ 
      indexDispatcher.dispatch({ 
       actionType: 'logonFaild', 
       errorInfo: json.msg 
      }); 
     } 
    }); 

И ответ сервера только простой JSON:

if (err) { 
    consoloe.log(err); 
} else { 
    req.session.account = account[0]; //save account to session 
    var redirecturl = '/team/' + team[0].id; 
    console.log("account添加到session了"); 
    res.json({ 
     success: 1, 
     redirecturl: redirecturl 
    }); 
} 

Но когда клиент получить redirecturl и перенаправлять данные account теряется, так что возникнет TypeError: Cannot read property 'id' of undefined (идентификатор сохраняется в req.session.account).

Но когда я использую jquery $.ajax relpace fetch, он работает хорошо. Я не знаю причины.

+0

См. Мой ответ ниже, спасибо, что разместили дополнительную информацию. – xaviert

+0

Любое обновление по этому вопросу? – xaviert

-1

У меня был такой же опыт, как вы сотни раз, и я, наконец, нашел проблему. Вам не нужно беспокоиться о том, разрешены или запрещены файлы cookie.

У вас должно быть только re-declare частей ваших скриптов (переменные - данные, которые вы хотите отобразить) в состоянии if else.

Только redeclare то же самое, используя! Isset, а затем еще с теми же переменными, упомянутыми дважды в условии if else, если вы понимаете, что я имею в виду.

Он будет перезывать те же переменные снова и снова. И убедитесь, что начало session находится над страницей. не нужно беспокоиться о заголовках или белых линиях, это не имеет к этому никакого отношения.

Я пробовал это миллион раз. Вам не нужно беспокоиться об использовании ajax и т. Д. PHP может делать практически все. cheerio.

+0

Какая у вас проблема? –

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