Ответ 1
Если вы делаете app.use(app.router)
перед строками, которые настраивают обработку файлов cookie и сеанса, попробуйте переместить их после них. Для меня эта проблема была решена.
поэтому я в основном хочу использовать сеансы для хранения имени пользователя и проверить, зарегистрирован ли пользователь или нет. Если нет, страница будет перенаправлена на страницу входа.
Я использую Node.js, express и couchDB.
Вот как я установил сеанс до сих пор
var MemoryStore = require('connect').session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({
secret: "keyboard cat",
store: new MemoryStore({
reapInterval: 60000 * 10
})
}));
Чтобы сохранить что-то в сеансе, я правильно использую следующий код?
req.session = {user:name);
Итак, переменная сеанса работает на моей странице входа. Я успешно сохраняю имя пользователя в сеансе. Однако, когда я пытаюсь получить доступ к переменной сеанса на другой странице, это дает мне ошибку
Cannot read property 'user' of undefined
все, что я делаю, это:
if (req.session.user){
Почему эта ошибка происходит? являются ли сеансы не глобальными для всего приложения? Или я пропущу что-то совершенно здесь.
Спасибо заранее!
Если вы делаете app.use(app.router)
перед строками, которые настраивают обработку файлов cookie и сеанса, попробуйте переместить их после них. Для меня эта проблема была решена.
Я пытался решить ту же самую проблему за последние несколько часов.
Попробуйте инициализировать свой сервер следующим образом:
var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
);
Это должно работать.
У меня была такая же проблема с получением undefined для переменной сеанса, которая, как я знал, была установлена нормально.
В моем случае это оказалось вызвано запросом на перекрестный поиск, я забыл заголовок withCredentials в запросе.
Так, например, в приложении на стороне клиента Angular мне нужно было сделать это:
var config = { withCredentials: true };
return $http.get(appConfig.apiUrl + '/orders', config);
и в Express:
res.header('Access-Control-Allow-Credentials', true);
sessionSecret
в конфигурации (config.json?) должен быть непустым:
sessionSecret: "something other than an empty string",