2011-04-10 11 views
4

저는 웹 개발에 대해 배우기 시작했습니다. 그리고 잠시 동안 나를 괴롭 히고 있습니다. 웹 사이트가 어떻게 액세스하고 액세스 할 수 없는지 제어합니다.웹 사이트 액세스 제어는 실제로 어떻게 작동합니까?

예를 들어 Facebook과 같은 웹 사이트. 내가 처음 사이트에 간다면 로그인 폼을 표시합니다. 일단 액세스하려고했던 동일한 페이지를 기록하면 나에게 관련된 정보가 표시됩니다. 로그인 한 번만 액세스 할 수 있으며 다른 사이트로 이동할 수 있습니다. 구글로 컴백하면 다시 로그온하지 않아도 사용할 수 있습니다.

사이트가 로그인하지 않은 상태에서 특정 페이지에 액세스하려는 사용자를 정확히 차단하는 방법은 페이지 viewProfile.php입니다. 이 페이지에 대한 액세스를 허용 할 대상을 웹 사이트에서 어떻게 알 수 있습니까?

나는이 질문이 혼란스럽고 초등적 인 것처럼 보일 수 있지만 페이스 북을 보면서 나에게 온 것은 무엇인지 깨닫는다.

감사합니다.

+4

sessions \ cookies 이제는 약간의 조사를하러갑니다. –

+1

@Dragon, 그는 당신에게 pleb 연구 중입니다! – RobertPitt

+0

수백만 번에 4 백만 번째 시간을 기록 할만한 것을 요구하는 사람은 연구가 아닙니다. –

답변

0

"세션 관리"에 대한 Google 검색을 수행하십시오. 당신이 사이트에 로그인 할 때

요약

당신은 고유 ID를 얻을. 이 id는 데이터베이스에서 데이터를 가져 와서 viewProfile.php와 같은 동적 페이지를 데이터로 채 웁니다. 따라서 각 사용자는 동일한 파일 viewProfile.php를 가져 오지만 고유 ID를 기반으로 다른 결과를 얻습니다.

6

이것은 세션이라는 매우 간단한 개념입니다.

페이스 북을 방문하면 IP 주소, 브라우저 및 기타 부수적 인 정보와 같은 연결을 통해 보낸 고유 정보를 읽습니다.이 정보가 결합되면 고유 식별자가 작성됩니다.

이 고유 식별자는 그래서 같은 파일에 저장됩니다

d131dd02c5e6eec4693d9a0698aff95c.session 

을 그래서 당신은 등

때 마지막 활동으로 거기 자격 증명을 사용하여이 파일에 응용 프로그램 추가 기능의 정보를 로그인 할 때 당신이 떠나서 돌아 오면 페이스 북은 모든 요청과 함께 전송 된 정보를 읽습니다. 그리고 나서 그것을 모두 합하여 고유 한 해시를 만듭니다.이 해시가 스토리지 시스템 내에 존재하면 열어서 내용을 읽습니다. 네가 누군지 정확히 알지.

모든 쿠키와 결합 된 고유 한 해시가 브라우저로 다시 전송되고 쿠키 폴더에 저장됩니다.이 쿠키 파일은 요청할 때마다 페이스 북으로 다시 전송됩니다.

PHP는 그것을 얻기 위해 아주 기본적인 그리고 실행 있도록 내부적으로 당신을 위해 이것을 처리 : http://php.net/manual/en/features.sessions.php

다음은 개념을 좀 더 이해하는 데 도움이 수있는 예입니다.당신은이 사이트를 1 번 vistited 한

  • :이 페이지를로드 한 후 F5 키를 치면

    <?php 
    /* 
        * The session_start generates that hash and send a cookie to the browser 
        * This has to be first as you can only send cookie information before any content 
    */ 
    session_start(); 
    
    /* 
        * Anything storeg within $_SESSION is what's been read from the session file and 
        * We check to see if the information has already been set on the first time the user 
        * visited the site 
    */ 
    if(!isset($_SESSION['hits'])) 
    { 
        $_SESSION['hits'] = 0; 
    } 
    
    /* 
        * Now we increment the value every time the page is laoded 
    */ 
    $_SESSION['hits']++; 
    
    /* 
        * now we display the amount's of hits the user has loaded the page. 
    */ 
    
    echo 'You have vistited this site <strong>' . $_SESSION['hits'] . '</strong> times.'; 
    
    ?> 
    

    것은, 세션 값은 같은 것을 볼 수 있도록의 모든 요구를 증가 얻을.

  • 귀하는이 사이트를 꾸몄습니다 번.
  • 귀하는이 사이트를 꾸몄습니다 번.
  • 귀하는이 사이트를 꾸몄습니다 번.
  • ...

세션 파일 따라서 PHP에서 세션 변수를 사용할 때 모든 사람들이 각각의 세션이 자신의 얻을 그래서, 해당 사용자에게이 될 것이라고 의미 방문 각자 고유합니다.

PHP와 세션과 같은 특정 태그에 대해 StackOverflow를 검색하는 제품입니다.

https://stackoverflow.com/questions/tagged/php+session

여기 등 쿠키와 세션의 장점

Purpose Of PHP Sessions and Cookies and Their Differences

1

웹 사이트가 사용자의 컴퓨터에 정보를 저장하는 "쿠키"라는 것을 사용에 관해서 좋은 질문입니다.

이 정보는 모든 텍스트 문자열을 포함 할 수 있지만,이 경우 페이스 북이 알고있는 고유 ID 일 가능성이 있습니다 (어딘가 데이터베이스에 저장되어 있음). 쿠키는 쿠키를 보낸 웹 사이트와 브라우저 자체에서만 읽을 수 있습니다.

로그인 페이지는 일반적으로 사용자 이름/암호 조합을 데이터베이스 데이터베이스의 데이터와 비교하여 확인하는 POST/GET 요청을 스크립트에 보냅니다. 데이터가 유효한 것으로 확인되면 사용자는 웹 사이트 방문 페이지 (로그인 후 페이지)에 대한 액세스 권한이 부여되고 쿠키가 저장됩니다. 그렇지 않은 경우 오류 메시지와 함께 다시 전송됩니다.

쿠키는 "수명"을 가질 수도 있습니다. 이 수명은 무엇이든 될 수 있습니다. 당신이 사이트를 떠날 때까지; 브라우저를 닫을 때까지 또는 영원히 (아마 더 있습니다.)

쿠키를 보낸 웹 사이트는 만료되기 전에 쿠키를 삭제할 수 있습니다. 이것이 대부분의 "로그 아웃"버튼의 작동 방식입니다.

0

쿠키로 이루어집니다. 로그인 할 때 사이트는 설정된 시간 동안 브라우저에 쿠키를 저장합니다 (로그인 상태를 유지할 수 있도록 일반적으로 매우 긴 시간). 사이트에 다시 액세스하면 브라우저가 쿠키를 사이트로 보내고 사이트는 새로운 쿠키를 설정합니다. 모든 브라우저에서 옵션 목록의 어딘가에 쿠키 목록을 찾을 수 있습니다.

쿠키에 대한 자세한 내용을 알고 싶은 경우에, 당신은 위키 피 디아 읽을 수 있습니다 : http://en.wikipedia.org/wiki/HTTP_cookie

1
  1. 만, 그런 그들이 로그인되어 있는지 먼저 사인을 확인할 수 있습니다 콘텐츠를 보려면 사용자가 로그인 할 수 있도록를 활성 세션을 찾아보고 로그인했음을 알려주는 플래그가 있음을 나타냅니다. PHP 페이지 상단에서 간단히 다음을 수행 할 수 있습니다 :

    <?php session_start(); 
        if(!isset($_SESSION['loggedin'])){ 
         header('Location: http://example.com/login.php'); 
        }  
    ?> 
    

    로그인하지 않은 사용자를 로그인 페이지로 리디렉션합니다. 로그인 성공시 $ _SESSION [ 'loggedin']을 값으로 설정해야합니다.

  2. 로그인 한 사용자가 특정 프로필을 볼 수 있는지 확인하려면 페이지가 친구에게만 공개 된 페이지를 찾는 것보다 먼저 로그인 한 사용자의 아이디가 프로필 소유자의 친구에게 있는지 확인하십시오 DB에있는 필드.

관련 문제