2014-09-03 52 views
0

我想知道是否有可能檢查鏈接是否在PHP中被點擊。檢測href鏈接是否被點擊使用PHP

我創建了一個頁面,下載遊戲,我希望用戶能夠下載的應用程序,但必須先登錄。

所以我想一個senerio其中一個用戶點擊下載按鈕,然後代碼將檢查用戶是否已經登錄,如果沒有打開要註冊的頁面,則開始下載。

+0

使用$ _SESSION和/或$ _COOKIE檢查用戶是否登錄。如果他是,顯示鏈接,如果不是,重定向。 – 2014-09-03 10:03:26

+0

PHP處理服務器,但你正在談論客戶端,這聽起來像是一個JavaScript的工作。但是,您可以在兩者之間進行交互,以便JavaScript告訴PHP代碼要記住的內容。 – Jonast92 2014-09-03 10:04:04

+0

答案 - **是的,你可以**。當用戶點擊一個按鈕時,檢查用戶是否已使用$ _SESSION登錄,如果已登錄,則將其重定向到download.php頁面,否則將他重定向到註冊頁面。請粘貼你的代碼,你嘗試過或沒有嘗試過。 – 2014-09-03 10:07:41

回答

0

您可以向服務器發出一個異步請求來檢查它,(AJAX)返回一些數據,並根據響應執行您需要執行的操作。

+0

他不想使用jquery ajax。這可以簡單地通過PHP實現 – 2014-09-03 10:08:46

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.'; 

    } 

} 
0

感謝您的幫助,我終於得到了答案對上述問題通過 @emilos註釋的提示:對於偷看,這可能有幫助。

我所做的就是創建一個javascript函數來監聽點擊錨標籤,然後這個函數調用服務器上的php頁面。 PHP頁面檢查用戶是否登錄/不是iF登錄它返回1 else 0回到客戶端。

收到與AJAX的幫助下此響應的客戶端,然後我用if語句來或不知道用戶是否應被允許下載不

這是我如何實現它

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>