2012-07-27 8 views
22

में अजाक्स अनुरोध की जांच करें मैं एक PHP स्क्रिप्ट में हूं और मैं यह जांचना चाहता हूं कि अनुरोध अजाक्स अनुरोध है या नहीं। (मूल रूप से इतनी के रूप में प्रत्यक्ष स्क्रिप्ट उपयोग की अनुमति नहीं करने के लिए, अजाक्स कॉल है कि अन्य की तुलना में ...)कोड इग्निटर

तो, मैं मुख्य index.php फ़ाइल में कहीं IS_AJAX को परिभाषित कर रहा हूँ:

define('IS_AJAX', 
     isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
     strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 

और फिर यह जाँच मेरी स्क्रिप्ट के शीर्ष पर:

if (!IS_AJAX) exit('No direct script access allowed'); 

जब से मैं CodeIgniter के लिए नया हूँ, मैं सच में यकीन नहीं है ...

  • क्या ऐसी कोई अंतर्निहित कार्यक्षमता है?
  • क्या कोई और ... इसे करने का शानदार तरीका है?

उत्तर

97

आप input वर्ग से $this->input->is_ajax_request() उपयोग कर सकते हैं:

if (!$this->input->is_ajax_request()) { 
    exit('No direct script access allowed'); 
} 
+1

बढ़िया! मुझे पता था कि मुझे कुछ याद आ रहा है ... बहुत बहुत धन्यवाद, दोस्त! –

+2

is_ajax_request() एक सुरक्षा उपाय नहीं है। ऐसा ही एक उत्तर है जहां 404 बदले में वापस आ गया है, जो एक भ्रामक छाप देने से बचा होगा। (HTTP/1.1 "यह स्थिति कोड आमतौर पर तब प्रयोग किया जाता है जब सर्वर यह प्रकट नहीं करना चाहता कि अनुरोध क्यों अस्वीकार कर दिया गया है, या जब कोई अन्य प्रतिक्रिया लागू नहीं होती है") http://stackoverflow.com/questions/6555652/controller- विधियों-जो-केवल-नाम-द्वारा-एजेक्स-मेक-प्राइवेट/8072539 # 8072539 – sourcejedi

+0

मैं आमतौर पर फ़ाइल लोड करने के लिए लोड विधि का उपयोग करता हूं, मैं उन फ़ाइलों को सीधे लोड करने से कैसे रोकूं? –

0

अगर आप अपने CodeIgniter एप्लिकेशन से अनुरोध अनुकूलित चाहते हैं, यह प्रयास करें: आप आवेदन/हुक में Ajax_only.php नाम के एक हुक बनाने चाहिए फ़ोल्डर

class Ajax_only { 
    private $_controllers = []; 

    private $CI; 

    public function __construct() { 
     $this->CI =& get_instance(); 
    } 

    public function eval_request() { 
     $controller = $this->CI->router->fetch_class(); 
     $method = $this->CI->router->fetch_method(); 
     if (array_key_exists($controller, $this->_controllers) && $this->CI->input->is_ajax_request() === FALSE ) { 
      if (($this->_controllers[ $controller ] === TRUE || (is_array($this->_controllers[ $controller ]) && array_key_exists($method, $this->_controllers[ $controller ]) && $this->_controllers[ $controller ][ $method ] === TRUE))) { 
       show_404(); 
      } 
     } 
    } 
} 


/*Examples 
* $_controllers = [ 
*  'my_controller_name' => TRUE //all methods must be ajax 
*  'my_controller_name => [ 
*   'method_name' => TRUE //only the selected methods must be ajax 
*  ] 
* ] 
*/ 

और कॉन्फ़िगर अपने आवेदन/config/hooks.php फ़ाइल

$hook['post_controller_constructor'] = array(
    'class' => 'Ajax_only', 
    'function' => 'eval_request', 
    'filename' => 'Ajax_only.php', 
    'filepath' => 'hooks' 
); 
संबंधित मुद्दे