>source

express with get 요청에서 세션 쿠키를 검색하려고 할 때 문제가 있습니다.

앱이 포트 3000에서 실행되는 동안 서버가 포트 8000에서 실행 중입니다.

http : // localhost : 8000/setcookie 및/getcookie로 바로 이동하면 쿠키를 설정하면 제대로 작동합니다. 반면에 http : // localhost : 3000 에서 동일한 작업을 시도하고 axios를 사용하여 요청을 가져 오거나 게시 할 때 포트 8000에서 쿠키와 signedCookies는 요구 사항에 비어 있으며 이유를 모르겠습니다. 수신 대기하고 포트 8000으로 요청을 전송하더라도 포트 3000에서 전송하기 때문입니까?

쿠키를 만들기 위해 get 및 post 메소드를 모두 사용해 보았습니다. 둘 다 작동하지 않는 것 같습니다. 조금 길을 잃었습니다.

내 설명이 충분히 명확했으면 좋겠다. 감사합니다.

서버

const app = express()
const port = process.env.PORT || 8000
app.set("port", port)
const http = require('http').Server(app);
//Body Parser
var urlencodedParser = bodyParser.urlencoded({
    extended: true
});
app.use(urlencodedParser);
app.use(bodyParser.json());
//Définition des CORS
app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});
app.use(cookieParser("secret")); 
app.get('/setcookie', function (req, res, next) {
  // Update views
  console.log("connection", req);
  var mail = req.body.email
  res.cookie('b', 'jefaisuntest', {signed: true, expire : 600000});
  // Write response
  res.send("cookie sent")
})
app.get('/getcookie', function(req, res) {
    var username = req.signedCookies['b'];
    console.log("iciiii", req)
    if (username) {
        return res.send(username);
    }
    return res.send('No cookie found');
});
const server = http.listen(port, function () {
    console.log(`listening on *:${port}`)
})

클라이언트

import axios from 'axios';
const headers = {
    'Content-Type': 'application/json'
}
const burl = "http://localhost:8000"
export default {
    login : function(email:string, password:string) {
        axios.get(burl + '/setcookie')
    },
    isAuth : function() {
        axios.get(burl + '/getcookie')
    },
}


  • 답변 # 1

    @mnesarco의 말이 맞습니다. 기술적으로 두 개의 서로 다른 서버를 실행하고 있기 때문에 두 서버간에 보내는 모든 요청은 CORS 요청입니다. CORS 요청에서 보내기 쿠키를 공유하려면 withCredentials 를 설정해야합니다.  true로 플래그 지정 :

    export default {
        login : function(email:string, password:string) {
            axios.get(burl + '/setcookie', { withCredentials: true })
        },
        isAuth : function() {
            axios.get(burl + '/getcookie', { withCredentials: true })
        },
    }
    
    

    자세한 내용은 비슷한 상황 또는이 mdn 페이지에서이 답변을 참조하십시오.

  • 답변 # 2

    각 호스트 : 포트 조합은 다른 사이트입니다. 두 개의 다른 "도메인"간에 코키를 공유 할 수 없습니다

  • 이전 html - PHP로 양식에 제출 제한을 두는 방법
  • 다음 angular - 속성 값에 따라 클래스를 사용