php 다 중 사이트 공용 session 구현 단일 로그 인 방법 상세 설명
요즘 은 한가 해서 하 도 급 한 로그 인 문 제 를 정리 하고 있 습 니 다.
단일 로그 인의 기본 원 리 는 클 라 이언 트 가 sesionid 를 공유 하고 서버 에서 session 정 보 를 공유 하 는 것 이다.공 통 된 sessionid 를 통 해 서버 에서 같은 session 정 보 를 얻 으 면 단일 로그 인(즉,다 중 사이트 에서 사용자 정 보 를 공유 하고 한 곳 은 로그 인 하 며 곳곳에서 사용 가능)의 목적 을 달성 할 수 있 습 니 다.
단일 로그 인 은 두 가지 상황 으로 나 뉜 다.
1.사이트 가 같은 서버 에 배치 되 고 같은 2 급 도 메 인 이름 을 사용 합 니 다.
이런 상황 에 서 는 비교적 해결 하기 쉽다.
1.먼저 사이트 가 클 라 이언 트 sessionid(쿠키 존재)의 공유 문 제 를 해결 합 니 다.사용 iniset()함 수 는 쿠키 의 도 메 인 을 지정 할 수 있 습 니 다.다음 과 같 습 니 다
ini_set('session.cookie_domain', '.xxxx.com');
//서버 쿠키 의 도 메 인 을 설정 하고 xxxx 는 공용 2 급 도 메 인 이름 입 니 다.2.그 다음 에 사이트 가 서버 에 있 는 session 정보의 공 유 를 해결 합 니 다.사이트 가 같은 서버 에 있 기 때문에 생 성 된 session 파일 은 공용 으로 사용 할 수 있 으 며 sessionid 를 사용 하여 해당 하 는 session 정 보 를 직접 얻 을 수 있 습 니 다.
2.사이트 가 서로 다른 서버 에 배치 되 어 서로 다른 도 메 인 이름 을 사용 합 니 다.
이러한 상황 은 비교적 복잡 합 니 다.사이트 가 서로 다른 서버 에서 서로 다른 도 메 인 이름 을 사용 하기 때문에 클 라 이언 트 에서 ini 를 사용 할 수 없습니다.set 쿠키 의 역할 도 메 인 을 설정 하고 서버 에서 도 각각 자신의 session 파일 을 생 성하 여 공유 할 수 없 지만 해결 방법 을 사용 합 니 다.
1.클 라 이언 트 sessionid 동기 화 문 제 를 먼저 해결 합 니 다.
우리 에 게 세 개의 사이트 가 있다 고 가정 하면 도 메 인 이름 은 각각 aa.com,bb.com,cc.com 이다.저 희 는 aa.com 에 공용 로그 인 입구 login.php 를 만 들 었 습 니 다.세 사이트 의 로그 인 요청 은 모두 이 페이지 로 넘 어 갑 니 다.코드 프로 세 스 는 다음 과 같 습 니 다.
$back = login($name,$pwd);// , session
// ,
if($back){
$sessionid = session_id();
$key = encode($session,$keyword);//
// ,
}
로그 인 성공 html 알림 페이지 에 다음 코드 를 추가 합 니 다.iframe 탭 을 이용 하여 동기 화 로그 인 을 요청 하 는 사이트 입 니 다.aa.com 과 cc.com 사이트 의 setcookie.php 파일 은 다음 과 같 습 니 다.
// $key
decode($key);
// sessionid sessionid
session_id($_GET['sessionid']);
session_start();
2.세 사이트 서버 에서 session 을 공유 하 는 문 제 를 해결 합 니 다.앞에서 말 했 듯 이 세 사이트 가 같은 서버 에 없 기 때문에 각자 의 session 파일 을 생 성 합 니 다.이 파일 을 공유 하려 면 도 메 인 을 뛰 어 넘 는 등 일련의 문제 에 직면 합 니 다.그래서 저 희 는 파일 로 session 정 보 를 저장 하지 않 고 session 정 보 를 데이터베이스 에 저장 합 니 다.이렇게 하면 session 정보의 sessionid 를 얻 으 면 모든 사이트 에서 같은 session 정 보 를 방문 할 수 있 습 니 다.
우리 mysql 만 들 기session.php 파일 은 session 정 보 를 데이터베이스 에 저장 하 는 데 사 용 됩 니 다.코드 는 다음 과 같 습 니 다.
$gb_DBname="test"; //
$gb_DBuser="root"; //
$gb_DBpass=""; //
$gb_DBHOSTname="127.0.0.1"; // IP
$SESS_DBH=""; //
session_module_name("User"); // session
$SESS_LIFE=get_cfg_var("session.gc_maxlifetime");// session ,
function sess_open($save_path,$session_name)
{
global $gb_DBHOSTname,$gb_DBname,$gb_DBuser,$gb_DBpass,$SESS_DBH;
if(!$SESS_DBH=mysql_pconnect($gb_DBHOSTname,$gb_DBuser,$gb_DBpass)){
echo "MySql Error:".mysql_error()."";
die();
}
if(!mysql_select_db($gb_DBname,$SESS_DBH)){
echo "MySql Error:".mysql_error()."";
die();
}
return true;
}
function sess_close(){
return true;
}
function sess_read($key)
{
global $SESS_DBH,$SESS_LIFE;
$qry="select value from db_session where sesskey = '$key' and expiry > ".time();
$qid=mysql_query($qry,$SESS_DBH);
if(list($value)=mysql_fetch_row($qid)){
return $value;
}
return false;
}
// session 。 session :db_session
// id,
//sesskey sessionid
//values session
//expiry session
function sess_write($key,$val)
{
global $SESS_DBH,$SESS_LIFE;
$expiry=time()+$SESS_LIFE;
$value=$val;
$qry="insert into db_session values('$key',$expiry,'$value')";
$qid=mysql_query($qry,$SESS_DBH);
if(!$qid){
$qry="update db_session set expiry=$expiry, value='$value' where sesskey='$key' and expiry >".time();
$qid=mysql_query($qry,$SESS_DBH);
}
return $qid;
}
function sess_destroy($key)
{
global $SESS_DBH;
$qry="delete from db_session where sesskey = '$key'";
$qid=mysql_query($qry,$SESS_DBH);
return $qid;
}
function sess_gc($maxlifetime)
{
global $SESS_DBH;
$qry="delete from db_session where expiry < ".time();
$qid=mysql_query($qry,$SESS_DBH);
return mysql_affected_rows($SESS_DBH);
}
session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc");
이후 session 을 사용 해 야 하 는 페이지 에서 sessionstart()전에 이 파일 을 도입 하면 다른 것 은 평소 seesion 을 사용 하 는 것 과 같 으 면 됩 니 다.할당 한 session 이 데이터베이스 에 저장 되 어 있 음 을 발견 할 수 있 습 니 다.더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.