시나리오: 예를 들어 사용자 로그인 인터페이스 a와 사용자 정보 획득 인터페이스 b의 두 가지 인터페이스가 있습니다. 브라우저에서 호출할 때 전혀 문제가 없습니다. 이제 jq의
ajax
을 사용하여 이 두 인터페이스를 호출해야 할 때 문제가 발생합니다.
먼저 브라우저에 대해 이야기해 보겠습니다.
브라우저에 로그인 인터페이스 주소를 입력하고 매개변수를 전달하여 로그인에 성공했습니다. 서버(php)는 내 사용자 ID, 사용자 이름 등을 session
에 저장합니다. 다음으로 사용자 정보 인터페이스를 요청합니다. b. 서버가 세션에서 직접 사용자 정보를 찾아 브라우저로 반환합니다.
Ajax에 대해 이야기해보겠습니다.
ajax를 사용하여 js에서 로그인 인터페이스를 호출하고 성공 정보를 반환하여 로그인에 성공했습니다. 사용자 정보도 세션에 저장됩니다. 하지만 사용자 정보를 얻기 위해 ajax를 사용하여 인터페이스 b를 호출했을 때 문제가 발생하여 session
찾을 수 없다는 메시지가 표시되었습니다.
콘솔에서 확인해 보니, 다음번에 동일한 도메인 이름으로 인터페이스를 요청하면 set-cookie
의 정보가 응답 헤더에 자동으로 반환됩니다. 서버에서 cookie
의 데이터를 얻기 위해 요청 헤더에 전송됩니다. session
정보도 반환되지만, 다음 번에 동일한 도메인 이름으로 인터페이스를 요청할 때는 set-cookie
이 자동으로 전송되지 않습니다. cookie
데이터를 찾을 수 없습니다. session
세션 데이터를 얻으려면 Ajax 요청 시 수동으로 쿠키를 보내야 하나요? 그렇지 않은 경우 세션 데이터를 얻는 방법은 무엇입니까?
ajax
매개변수 추가 요청xhrFields: { withCredentials: true },
ajax
请求添加参数xhrFields: { withCredentials: true },
php 设置
php setheader('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Credentials:true');
🎜세션은 쿠키를 사용합니다. 서버의 쿠키는 어디에 저장되나요?
클라이언트 브라우저에서 쿠키를 전달하더라도 서버의 쿠키와 일치하나요?
그래서 서버에서는 세션이 불가능하고 토큰만 사용할 수 있으며, 백그라운드에서 정보를 저장하려면 redis 등을 사용해야 합니다.