programing

php에서 에이잭스를 통해 요청할 때 세션 ID가 변경되는 이유는 무엇입니까?

newstyles 2023. 8. 27. 08:59

php에서 에이잭스를 통해 요청할 때 세션 ID가 변경되는 이유는 무엇입니까?

로그인했습니다.Banana.com바나나에는 API 링크가 있습니다./app/ajax_loggedin.

제 웹사이트는 몽키입니다.원숭이는 바나나의 간단한 GET json을 운영합니다./app/ajax_loggedin이 값은 1 또는 0 중 하나의 로그인 값을 반환합니다.

내가 실제로 바나나에 로그인하고 있고 링크에 직접 접속할 때도 1을 주지만, 아약스를 통해 항상 0을 반환하는 이유는 무엇입니까?바나나의 개발자는 어떻게 고칠 수 있습니까?

서버 사이드콜이면 이해했을텐데 로그인해도 바나나가 요청하면 왜 말을 안하는지 이해가 안가요.입니다.session_id()확인합니다. 각 통화는 Ajax를 통해 새로 생성되며 직접 액세스할 때 정상적으로 작동하며 동일하게 유지됩니다.

이것을 할 수 있는 해결책이나 다른 방법이 있습니까?

서버(API)에 대한 모든 진입점 또는 호출에는session_start()처음에세션 식별자를 읽지 않으면 없는 것처럼 작동한 다음 새 세션 식별자를 반환합니다.브라우저가 응답을 받으면 세션 식별자를 새 세션 식별자로 덮어씁니다.다음을 수행해야 합니다.session_start()서버가 사용할 세션을 알 수 있도록 서버에 호출하는 모든 위치의 맨 위에 있습니다.

사실 이 질문에 대한 확실한 대답을 하기에는 정보가 충분하지 않습니다.하지만 이 정보를 바탕으로 알 수 있는 것은 다음과 같습니다.

표준 PHP 세션 핸들러를 사용하는 경우 세션 쿠키에 도메인이 연결됩니다(pph.ini 또는 코드에서 구성되지 않은 경우 스크립트가 처음 호출된 도메인일 가능성이 높습니다).예를 들어, 호출하는 스크립트를 호출하면session_start()www.stackoverflow.com 도메인과 chat.stackoverflow.com 의 다른 스크립트는 www.stackoverflow.com 도메인의 쿠키에 액세스할 수 없는 세션을 시작하여 새 세션을 시작합니다.

쿠키 헤더의 도메인은 버블업할 수 있지만 다운되지는 않습니다.세션 쿠키가 의 모든 하위 도메인에 액세스할 수 있도록 하려면Banana.com해당 도메인의 각 세션 초기화 요청에서 도메인 매개 변수를 올바르게 설정해야 합니다.

자세한 내용은 session_set_cookie_paramssession_get_cookie_params를 참조하십시오...

쿠키를 사용할 수 있는 도메인입니다.도메인을 'www.example.com '으로 설정하면 www 하위 도메인 및 상위 하위 도메인에서 쿠키를 사용할 수 있습니다.'example.com '과 같은 하위 도메인에서 사용할 수 있는 쿠키는 'www.example.com '과 같은 상위 하위 도메인에서 사용할 수 있습니다.더 이상 사용되지 않는 § RFC 2109를 구현하는 오래된 브라우저들은 모든 서브도메인과 일치하도록 선두 .가 필요할 수도 있습니다.

또한 secure 또는 http_only 매개 변수를 true로 설정하여 보낸 쿠키는 Ajax의 경우와 같이 안전하지 않거나 JavaScript가 시작된 연결에서 읽을 수 없습니다.

당신이 새로운 세션 ID를 얻는 이유는

  • 쿠키으로 이름이 "아이디 " (아이디 " (아이디 " (아이디))")를 지웠습니다.PHPSESSID)
  • session_regenerate_id()라는 페이지를 방문했습니다(가능하지 않음).
  • 세션이 최대 수명에 도달하여 가비지 수집되었습니다.PHP를 실행하면 가비지가 무작위로 수집되기 때문에 banana.com 에 방문자가 많을 경우 이는 명백한 가능성입니다.
  • session_id()가 다른 세션으로 호출되었습니다.

그래서 어떻게 해야 하나요?

  • 서버에서 세션 파일을 체크아웃합니다.간단한 텍스트이므로 열어 내용을 확인할 수 있습니다.세션이 존재하는지 확인합니다.
  • 짧은 세션 수명에 대해 php.ini를 확인합니다.
  • 다른 항목에 세션을 로드하고 계속 진행되는지 확인합니다.사용자 지정 세션 처리기와 함께 MySQL/memcached 시스템을 사용하면 문제가 나타날 수 있습니다.

api에 전화해서 세션이 활성화되었는지 확인하는 대신.세션 ID는 구성 파일에서 세션 ID를 저장할 위치가 지정된 경우 쿠키에 저장됩니다. 또는 다음 코드를 사용하여 세션 ID가 설정되었는지 실제로 확인할 수 있습니다.

session_start();      
$session_id=session_id();     
if(isset($_SESSION[$session_id]))

오리진 코드 및/또는 Ajax 코드의 무언가가 세션 저장 처리기를 설정하고 있습니다.예를 들어 Ajax 스크립트가 세션을 파일에 저장하는 동안 오리진이 세션을 데이터베이스에 저장할 수 있습니다.

여기 php 설명서가 있습니다: http://php.net/manual/en/class.sessionhandler.php

언급URL : https://stackoverflow.com/questions/31163030/why-does-the-session-id-change-when-requesting-through-ajax-in-php