2014-09-03 2 views
0

PHP에서 링크를 클릭했는지 확인할 수 있는지 알고 싶습니다. PHP를 사용하여 href 링크를 클릭했는지 감지

나는 게임을 다운로드 할 수있는 페이지를 만들었 나는 사용자가 응용 프로그램을 다운로드 할 수 있도록하려면,하지만 먼저 로그인해야합니다.

을 그래서 난 후, 사용자가 다운로드 버튼을 클릭 senerio을 원한다 코드는 사용자가 이미 로그인되어 있는지 확인하여 등록 할 페이지를 열지 않으면 다운로드를 시작합니다.

+0

$ _SESSION 및/또는 $ _COOKIE를 사용하여 사용자가 로그인했는지 확인하십시오. 그렇다면 링크를 표시하고 그렇지 않은 경우 리디렉션하십시오. –

+0

PHP가 서버를 처리하지만 클라이언트에 대해 말하면 JavaScript와 같은 소리가납니다. 그러나 자바 스크립트가 무엇을 기억할 것인지를 PHP가 알려주도록 중간에서 상호 작용할 수 있습니다. – Jonast92

+0

응답 - ** 가능 ** 할 수 있습니다. 사용자가 버튼을 클릭했을 때 사용자가 $ _SESSION을 사용하여 로그인했는지 여부를 확인하고, 로그인 한 상태라면 download.php 페이지로 리다이렉트하여 페이지를 등록 페이지로 리디렉션합니다. 시도했거나 시도하지 않은 코드를 붙여 넣으십시오. –

답변

0

서버에 비동기 요청을 보내서 확인하고 (AJAX) 일부 데이터를 반환하고 응답을 기반으로해야 할 일을 수행 할 수 있습니다.

+0

그는 jquery ajax를 사용하고 싶지 않습니다. 이것은 단순히 PHP로 달성 할 수 있습니다 –

0

사용자/로그인 구현이 이미 있다고 가정합니다. 따라서이 절차의 기본 원칙 만 다룰 것입니다.

프로세스의이 종류는 당신을 위해 처리하지만, 가장 단순한 형태로되어 복잡한 프레임 워크에서

는 다음과 같은 수행

if($user_is_logged_in) { 
    // Perform action 
} else { 
    header('Location: /login'); // Redirect to login/registor page 
} 

리디렉션 서버와 브라우저에 유용한 것들이다. 리디렉션은 일시적 일 수 있으며 리디렉션 전에 발생하는 프로세스는 의도 한 동작을 기억하도록 설계 될 수 있으므로 나중에 원래 경로를 계속 진행하여 올바른 위치로 리디렉션 할 수 있습니다.

0

세션이 필요합니다. 이것은 어떻게 성취 될 수 있는지에 대한 대략적인 예일뿐입니다. 사용자가 등록되어 로그인 한 경우 세션을 시작하십시오. 그런 다음 사용자가 다운로드 페이지로 이동하면 세션이 설정되어 있는지 (유효한 사용자) 확인하지 않으면 사용자를 리디렉션합니다. 설정된 경우, 다운로드 링크를 제공하고 파일을 제공하십시오.

참고 : 먼저 세션을 유지해야하는 기간과 같은 php.ini 파일에서 세션 매개 변수를 설정하십시오.

login.php

//If user logged in 
session_start(); 
$_SESSION['user'] = $username; 

download.php

session_start(); 
//If the session has not been set, redirect the user 
if (!isset($_SESSION['user'])) { 
    header("Location: register.php"); 
    die; 
} 

//Otherwise 
downloadFile(); 
0

또한 바로이 작업을 수행하는 양식을 사용할 수 있습니다.

HTML을

<form action="download.php" method="post"> 
    <button type="submit" name="download">Download file</button> 
</form> 

PHP

// This is just for testing purposes of course 
function is_logged_in() { 
    return false; 
} 

// Check if the form was processed 
if (isset($_POST['download'])) { 

    if (is_logged_in()) { 

     // download file 

    } 
    else { 

     // you could send a message directly or redirect the page 
     echo 'You are not logged in. Please click <a href="#">here</a> to register or sign-in.'; 

    } 

} 
마침내 @emilos 주석의 힌트를 통해 위의 질문에 대한 대답을 얻었다 도와
0

감사 : 친구들이 들어 도움이 될 수 있습니다.

내가 한 것은 앵커 태그에 대한 클릭을 듣는 javascript 함수를 작성한 다음이 함수가 서버의 PHP 페이지를 호출하는 것입니다. PHP 페이지는 사용자가 로그인했는지 여부를 확인합니다. iF 로그인하면 클라이언트에 1을 반환합니다.문

을 사용자가 다운로드 할 수해야하는지 모르거나하지 않는 경우

는 AJAX의 도움이 응답을 받았다 클라이언트는, 나는이 내가 AJAX

그것을 달성하는 방법 인 사용

function ajaxFunction(appName) { 
      var ajaxRequest = null; 
      try { 
       ajaxRequest = new XMLHttpRequest(); 
      }catch (e) { 
       try { 
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
       }catch (e){ 
        try { 
         ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
        }catch (e) { 
         alert("Browser broken!"); 
        } 
       } 
      } 

      ajaxRequest.onreadystatechange = function() { 
      if (ajaxRequest.readyState == 4) { 
       //alert("User_id: " +ajaxRequest.responseText); 
       //If not logged in 
       if (ajaxRequest.responseText == 0) { 
        window.location = "registration.php"; 
       }else { 
        window.location = "downloads/"+appName; 
       } 
      } 
      } 

      ajaxRequest.open("GET", "validate_user.php?checker=1",true); 
      ajaxRequest.send(null); 
     } 

PHP

if (isset($_GET['checker']) && $_GET['checker'] == 1) { 
    validateLogin(); 
    } 
    function validateLogin() { 
     if (!isLoggedIn()) { 
      //Not logged in 
      echo("0"); 
     }else { 
      echo("1"); 
      //Logged in 
     } 
    } 

    function isLoggedIn() { 
     return (isset($_SESSION['user_id'])); 
    } 

HTML

<a href="#" onClick="ajaxFunction('Pencil.apk');"><i class="icon-download-alt"></i></a> 
관련 문제