쿠키가없는 PHP 세션
세션 쿠키를 배치하지 않고 PHP에서 영구 세션을 시작할 수있는 방법이 있습니까? IP 주소 기반 솔루션과 같이 페이지간에 세션을 유지하는 다른 방법이 있습니까?
질문하는 이유는 대부분의 사용자가 쿠키를 사용하고 있지만 로그인 시스템이 비활성화 된 사용자를 위해 로그인 시스템이 작동 할 수있는 방법이 있는지 확인하고 싶기 때문입니다 (개인적으로 쿠키를 비활성화하는 것은 불필요한 편집증이라고 생각하지만).
사용자에게 쿠키를 사용하도록 요청하는 것이 너무 많은 일이라고 생각하지 않습니다. 사람들이 그것들을 완전히 끄는 것은 어리석은 일입니다.
그렇지 않으면 session.use_only_cookies"0"으로 설정하여 세션 ID를 PHP 내의 URL에 강제로 추가 할 수 있습니다. 그러나이 방법에는 몇 가지 단점이 있습니다. 주로 쿠키 헤더와 달리 URL 내에 상태를 유지하는 것입니다. 사용자가 자신이있는 페이지의 URL을 복사하여 붙여넣고 다른 사람이 클릭하면 둘 다 동일한 세션을 사용하게됩니다.
<?php
ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
ini_set("session.use_trans_sid", 1);
ini_set("session.cache_limiter", "");
session_start();
session.use_trans_sid모든 URL에 세션 ID 추가를 활성화 하려면 ini-Value 를 true로 설정할 수 있습니다 . 이것 좀보세요 .
보안을 위해 세션을 생성 한 IP로 세션을 제한해야합니다. 그러나 동일한 IP (예 : 프록시 뒤에있는)를 가진 사람이 동일한 세션을 재사용 할 수 있기 때문에 이것은 완벽하게 안전하지 않습니다.
URL에서 세션 ID로 작업하고 다음을 사용하여 쿠키를 비활성화 할 수 있습니다.
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
// IP check
if($_SESSION['ip_check'] != $_SERVER['REMOTE_ADDR']){
session_regenerate_id();
session_destroy();
session_start();
}
$_SESSION['ip_check'] = $_SERVER['REMOTE_ADDR'];
// session stuff
참고 : URL에서 세션 ID를 사용하는 것은 매우 권장되지 않습니다. IP 주소는 무선 카드를 가지고 이동할 때 변경 될 수 있으며 프록시 서버는 동일한 IP 주소를 갖습니다. '이전 URL'(이전 세션 ID 사용)을 클릭하면 쉽게 깨집니다.
(데이터베이스와 함께) 자신 만의 세션 처리 함수를 만드는 데 관심이있을 수도 있습니다. 세션 ID를 무시하고 IP 주소에 바인딩합니다. ( http://php.net/manual/en/function.session-set-save-handler.php의 예 참조 )
참조 :
데이터베이스 레코드 또는 임시 파일을 만들고 $_SERVER모든 페이지로드시 요청에 대해 변수를 확인할 수 있습니다. 보안 위험이 있지만 변수가 충분 하면 ( 여기 목록을 참조하십시오 ) 수용 가능한 수준까지 납치 할 가능성이 있다고 느낄 수 있습니다. 당신의 앱이 얼마나 안전해야하는지 당신 만이 알 수 있습니다.
데이터베이스에 IP 당 세션 ID를 저장할 수 있습니다.
session_id, ip 및 고유 한 임시 키 (로그인 한 사용자 용) 또는 원하는 기타 조건의 세 필드가있는 mysql 테이블을 만듭니다. 그런 다음 세션 쿠키를 끄고 use_trans_sid를 사용하십시오.
그런 다음이 새 테이블을 기반으로 세션 동작을 관리하는 코드를 만드십시오!
session_start()session_id를 테이블에 저장 한 후 나중에 테이블 (IP 및 기타 조건에 의해)에서 수신 한 다음 호출
session_id($in_table_session_id);
자세한 정보와 전체 가이드는 https://gist.github.com/mimrahe/77415f4a9e238c313bbe8c42f8a6b7fe를 참조하십시오.
그렇게하려면 HTML 코드에 세션 ID를 주석 태그로 추가하고 HTML 코드에 포함 된 세션 ID를 사용하도록 PHP 코드를 사용하고 구성합니다. 사용자 IP로 수행하거나 URL에 세션 ID를 추가하는 것보다 그렇게하는 것이 더 관련성이 있다고 생각합니다.
이에 대한 정답은 아니오입니다. 쿠키 외에 변수 조합을 사용하는 것은 안전하지 않습니다.
생각해보십시오. 사용자가 FIRST에서 페이지를 요청하면 서버는 "HTTP는 상태 비 저장입니다. 다음 번에 전화 할 때 '당신'임을 알 수 있도록 이것을 유지하십시오"라는 고유 한 값과 함께 페이지를 보냅니다. 즉, 해당 브라우저 (탭에 관계없이)에서 실행중인 해당 사용자는 고유 한 토큰을 가지고 있습니다.
성공적으로 로그인 한 경우에만 해당 토큰을 서버 측의 세션에 연결할 수 있습니다. 토큰은 너무 길고 무작위 적이 어서 아무도 제 시간에 추측 할 수 없습니다.
여러 브라우저에서 동일한 IP 주소를 사용할 수 있습니다. 여러 사람이 정확히 동일한 사용자 에이전트를 가질 수 있습니다. 쿠키는 작동하는 유일한 저장 시스템입니다.
실제로 한 가지 더 방법이 있습니다. 즉 , 서버 로 돌아가는 모든 단일 링크 와 모든 AJAX 호출에 고유 한 토큰을 추가하는 것 ?PHPSESSID=my-unique-token-189481958입니다.
참조 URL : https://stackoverflow.com/questions/3740845/php-session-without-cookies
'Program Club' 카테고리의 다른 글
| 솔로 개발자를위한 최고의 연속 통합 설정 (.NET) (0) | 2020.12.31 |
|---|---|
| Java에서 InputStream.available ()은 무엇을합니까? (0) | 2020.12.31 |
| WPF TreeView : 탐색기에서와 같이 둥근 모서리로 선택한 항목의 스타일을 지정하는 방법 (0) | 2020.12.31 |
| Xcode8.0 베타 6-장치에서 읽을 수 없음 (0) | 2020.12.30 |
| Eclipse- '프로젝트 패싯'을 Tomcat 6에서 Tomcat 5.5로 어떻게 변경할 수 있습니까? (0) | 2020.12.30 |