2014-09-03 51 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>