2010-08-09 18 views
6

मैं वेब प्रोग्रामिंग के लिए नया हूं और कुछ ऐसे अच्छे उदाहरण/ट्यूटोरियल खोजने की कोशिश कर रहा हूं, जो वेबसाइट बनाने का एक सभ्य काम कैसे करें, जिसके लिए उपयोगकर्ताओं को मुख्य लॉग से परे किसी भी पेज को देखने के लिए लॉग ऑन करना होगा पेज मेंPHP पासवर्ड संरक्षित वेबसाइट

अब तक मुझे 1 या 2 मिल गया है Ive कोशिश की लेकिन मैं एक ही समस्या में चल रहा है। अगर मैं सिर्फ पृष्ठ का यूआरएल दर्ज करता हूं, तो मैं मैन्युअल रूप से देखना चाहता हूं, जैसे कि वहां कुछ भी नहीं था।

+0

इस tutoral Ive अब तक निम्नलिखित किया गया है और मैं अपनी कार्यशील http://www.phpeasystep.com/phptu/6.html – Crash893

+0

हो सकता है कि मैं पढ़ने में भूलना नहीं लगता कि सवाल, क्या आपको एक पूर्ण उपयोगकर्ता लॉगिन प्रणाली की आवश्यकता है (उदाहरण के लिए अलग-अलग उपयोगकर्ताओं को अलग-अलग चीजों को देखने की ज़रूरत है) या आप नहीं चाहते कि हर कोई आपकी साइट को देखने में सक्षम हो? मेरी राय में। Htaccess जाने का रास्ता है। – williamg

+0

मैं उस बिंदु पर जाना चाहता हूं जहां मेरे पास उपयोगकर्ता और व्यवस्थापक और पावर उपयोगकर्ता – Crash893

उत्तर

1

HTTP प्रमाणीकरण नहीं है:

http://php.net/manual/en/features.http-auth.php

या आप एक लॉगिन फार्म और सत्र ट्रैकिंग के साथ अपने स्वयं रोल कर सकते हैं:

http://www.php.net/manual/en/book.session.php

एचटीपी ऑथ का अर्थ है कि उपयोगकर्ता को पॉप-अप संवाद विंडो मिलती है जो उपयोगकर्ता नाम और पासवर्ड मांगती है, यह स्वयं-लुढ़का संस्करण से कम सामान्य है।

आनंद लें!

0

यह प्रमाणीकरण के लिए PHP का उपयोग नहीं कर रहा है, लेकिन आप प्रमाणीकरण प्रदान करने के लिए htaccess उपयोग कर सकते हैं और संभवतः PHP का उपयोग .htpasswd फ़ाइल प्रबंधन:

http://www.freewebmasterhelp.com/tutorials/htaccess/

+1

वह php चाहता है, अपाचे कॉन्फ़िगरेशन नहीं, –

+0

विषय से बाहर न निकलें उन्होंने कहा कि वह वेब प्रोग्रामिंग के लिए नया था और वह एक वेबसाइट बनाने का एक तरीका ढूंढ रहा था जिसके लिए उपयोगकर्ताओं को मुख्य से परे किसी भी पेज को देखने के लिए लॉग ऑन करना होगा लॉगिन वाला पन्ना। .htaccess ऐसा करने का एक तरीका है कि उसने सोचा नहीं होगा। उन्होंने कभी नहीं कहा कि समाधान PHP में होना था। –

+0

मैं अभी भी PHP करना चाहता हूं लेकिन इससे मुझे एक अलग परियोजना के साथ मदद मिलेगी, इसलिए विचार के लिए +1 (मुझे नहीं पता कि आपको किसने -1 किया) – Crash893

1

साइटों आप का उल्लेख होने की संभावना bypassable वजह से पिछले सुरक्षा जांच पृष्ठों को बचाने नहीं है और उसके बाद प्रत्येक पृष्ठ के लॉगिन की स्थिति के लिए जाँच कर रहे हैं। किसी पृष्ठ पर पहुंचने से पहले आपको यह जांचना होगा कि विज़िटर लॉग इन है।

1

मुझे लगता है कि अधिकतर उपयोगकर्ता लॉगिन के लिए फॉर्म इनपुट की अपेक्षा करेंगे। यदि आप चाहते हैं कि उपयोगकर्ता वापस आएं और उनके सत्र की समाप्ति के बाद बाद में उसी खाते से लॉग इन करें, तो आपको उपयोगकर्ता की जानकारी संग्रहीत करने के लिए डेटाबेस की आवश्यकता होगी।

डेटाबेस में उपयोगकर्ता की जानकारी संग्रहीत करते समय, आपको शायद वास्तव में अपना पासवर्ड स्टोर नहीं करना चाहिए। एक उदाहरण के लिए:

name password       ... 
----------------------------------------------- 
Johnny '3858f62230ac3c915f300c664312c63f' 
Alice '80338e79d2ca9b9c090ebaaa2ef293c7' 
. 
. 
. 

जॉनी पासवर्ड वास्तव में है "foobar", लेकिन डेटाबेस भंडार md5('foobar')। जब जॉनी लॉग इन करने का प्रयास करता है, तो वह अपना उपयोगकर्ता नाम ('जॉनी') और उसका पासवर्ड ('foobar') में प्रवेश करता है। पीएचपी में, आप पासवर्ड वह प्रवेश किया हैश, और डेटाबेस से अपने पासवर्ड मूल्य फोन, जिसका परिणाम:

if (md5('foobar') == '3858f62230ac3c915f300c664312c63f') 

यह सशर्त true है। आप पुष्टि कर सकते हैं कि क्या उसने सही तरीके से लॉग इन किया है, लेकिन आप कभी भी अपना वास्तविक पासवर्ड संग्रहीत नहीं कर रहे हैं।

ऐलिस का पासवर्ड 'foobaz' है। वह लॉग इन करने की कोशिश करती है, लेकिन गलती से जॉनी के पासवर्ड 'फूबर' टाइप करती है। इसके परिणामस्वरूप:

if(md5('foobar') == '80338e79d2ca9b9c090ebaaa2ef293c7') 

false कौन सा है। फिर, आपको नहीं पता कि ऐलिस का पासवर्ड है, बस उसने गलत दर्ज किया है।

बेशक, इस रणनीति का नकारात्मक पक्ष यह है कि आप उपयोगकर्ता को यह नहीं बता सकते कि उनका पासवर्ड क्या है जब वे इसे भूल जाते हैं - आपको नहीं पता! आप उपयोगकर्ता को रीसेट करने के बजाय रीसेट करने के बजाय उनके पासवर्ड (कुछ अर्द्ध-यादृच्छिक स्ट्रिंग) को रीसेट करने के बजाय इसे हल कर सकते हैं।

+1

ध्यान दें कि यदि आपको यह करना है तो यह तरीका सबसे अच्छा तरीका होगा प्रत्येक उपयोगकर्ता के लिए जानकारी के व्यक्तिगत टुकड़े स्टोर करें। यदि आपको केवल कुछ लोगों को भागों, या पूरी वेबसाइट देखने की आवश्यकता होती है, तो यह अधिक हो सकता है। – williamg

2

किसी फ़ॉर्म का उपयोग करके लॉग इन करते समय, आपको डेटाबेस में उपयोगकर्ता नाम और पासवर्ड की जांच करनी चाहिए। पासवर्ड को स्कैम्बल किया जाना चाहिए (आमतौर पर एमडी 5 हैश एल्गोरिदम का उपयोग करके किया जाता है), और उसी तरह डेटाबेस में संग्रहीत किया जाना चाहिए। आप चर पर कब्जा, की तरह कुछ का उपयोग कर (कुछ सत्यापन का उपयोग करता है, तो पोस्ट चर मान्य हैं जाँच करने के लिए):

$username = $_POST['username']; 
$passwordHash = md5($_POST['password']); 

यूज़रनेम और पासवर्ड टुकड़ों में बांटा अपने डाटाबेस में संग्रहित किया जाना चाहिए। तो आप का उपयोग कर डेटाबेस में एक मैच के लिए जाँच कर सकते हैं:

$res = mysql_query("SELECT * FROM users WHERE username='".$username."' && password='".$password."'"); 

जब कोई उपयोगकर्ता पाया जाता है, तो आप सत्रों का उपयोग उपयोगकर्ता मूल्यों, जो आप पृष्ठों पर एक उपयोगकर्ता जानकारी तक पहुँच प्राप्त करने की अनुमति देगा स्टोर करने के लिए। नोट: session_start() आमतौर पर पृष्ठ के शीर्ष पर रखा जाता है, लेकिन मैं इसे पठनीयता के लिए यहां रखूंगा।

session_start(); 
if (!isset($_SESSION['logged_on'])) { 
    header("Location: login.php"); // user is not logged in, redirect to login page 
    exit; 
} 
// page content here 
6

ठीक है, मैं का तरीका बताएंगे मूल अवधारणा चला जाता है और करने के लिए एक बहुत ही सरल कार्यान्वयन:

if (mysql_num_rows($res)) { 
    session_start(); 
    session_regenerate_id(); // regenerate session_id to help prevent session hijacking 
    $row = mysql_fetch_assoc($res); 
    $_SESSION['logged_on'] = true; 
    $_SESSION['username'] = $row['username']; 
    // add more session variables about the user as needed 
} 

आप की रक्षा करना चाहते हैं कि हर पृष्ठ पर, आप उन पृष्ठों के शीर्ष पर निम्नलिखित जोड़ने चीजें चल रही हो जाओ।

PHP (और अधिकांश वेब एप्लिकेशन) रीस्टफुल सेवाओं पर भरोसा करते हैं - जो इस समय हमारी चिंता के लिए है, इसका मतलब है कि प्रत्येक अनुरोध किसी भी अन्य अनुरोध के लिए दूरस्थ रूप से बाध्य नहीं है - या तो एक ही उपयोगकर्ता या अन्य द्वारा।

तो इसका क्या अर्थ है?

इसका मतलब है कि प्रत्येक अनुरोध के लिए, आपको अपने चेक करने की आवश्यकता है। आपको यह सुनिश्चित करने की ज़रूरत है कि क्या उपयोगकर्ता को उस पृष्ठ को निष्पादित करने की अनुमति है, या इसकी सामग्री को कम गंभीर रूप से भी देखते हैं।

यह कैसे हासिल की है?

वास्तव में, कई तरीकों से। या तो केंद्रीकृत, या विकेन्द्रीकृत - वहाँ वेब अनुप्रयोगों पर प्राधिकरण लागू करने के लिए इस्तेमाल तकनीक के बहुत सारे हैं, लेकिन वे अनिवार्य रूप से दोनों दो में से एक करने के लिए नीचे टूट जाएगा।

- केन्द्रीकृत

अपने सभी कार्यों (और नियंत्रक) एक एकल फाइल के माध्यम से नियंत्रित किया जा रहा है इसका मतलब यह है। Index.php कहें। इस फ़ाइल में अनुरोध पैरामीटर के आधार पर अन्य कार्यों (जो सामान्य अनुरोधों के माध्यम से अपने आप पर चलने योग्य नहीं हैं) में अपने कार्यों को शामिल या प्रतिनिधि करेगा। यह एक बहुत ही लोकप्रिय तरीका है, लेकिन वास्तव में नई डेवलपर्स के लिए सीधे आगे नहीं। अनुप्रयोगों है कि इस दृष्टिकोण का उपयोग प्रकार के यूआरएल के लिए होता है के उदाहरण हैं:? index.php = रजिस्टर करते हैं, index.php, = लॉगिन कर index.php करना = showtopic & topic_id = 2, और इसके आगे?।

<?php 
// index.php 
define('RUNNING_APP', true); 
// 1. place your auth code here, or... 
switch ($_REQUEST['do']) { 
    case 'register': 
     // 2. or here 
     include 'inc/register.php'; 
     break; 

    case 'do_register': 
     // 2. and here, and before every include.. and so forth. 
     include 'inc/do_register.php'; 
     break; 
} 
?> 

<?php 
// inc/register.php 
defined('RUNNING_APP') or die('Cannot access this script directly'); // make sure to break direct access 
?> 
<form action="index.php?do=do_register"> 
<!-- form elements --> 
</form> 

और बहुत आगे है:

इस तकनीक का एक सरल कार्यान्वयन की तरह जाना होगा।

मैं प्रलेखित किया है जहां सामान्य प्रमाणन कोड जाना चाहिए।

- विकेन्द्रीकृत

इस दृष्टिकोण का प्रयोग, तथापि, आपके प्रमाणन कोड हर एक फ़ाइल की शुरुआत में जाना चाहिए। इस प्रकार के अनुप्रयोगों के यूआरएल आमतौर पर कुछ दिखते हैं: register.php, login.php, और बहुत आगे। यहां मुख्य समस्या यह है कि आपको ऊपर बताए अनुसार प्रति फ़ाइल सभी एथ तर्क करने की आवश्यकता है, और यदि आपकी फाइलें राशि में वृद्धि करती हैं तो यह एक व्यस्त नौकरी हो सकती है। एक सुविधाजनक समाधान यह है कि उस तर्क को एक फ़ाइल में रखना है, और उस फ़ाइल को शामिल करें (जो अनधिक व्यक्ति के लिए अनुरोध को मार देगा) आपके किसी भी तर्क से पहले। एक साधारण उदाहरण होगा:

<?php 
// index.php 
include('inc/auth.php'); 
// index logic 
?> 

<?php 
// register.php 
include 'inc/auth.php'; 
// register logic 
?> 

<?php 
// inc/auth.php 
$logged_in = false; 
if (!$logged_in) { 
    die ('You do not have permission to access this page. Please login'); 
} 
?> 
संबंधित मुद्दे