2009-08-05 15 views
5

क्या यह मेरे लिए काम करने के लिए वैसे भी है, इसलिए कोई भी जो F5 दबाता है या किसी भी रीफ्रेश बटन को किसी पृष्ठ पर रीफ्रेश करने के बजाय इसे अलग-अलग पृष्ठ पर ले जाया जाएगा?लोगों को पृष्ठ को रीफ्रेश करने से रोकें

कुछ की तरह:

If (refresh){ 

    goto "link to hopme page" 

} 

नहीं अगर वहाँ वैसे भी मुझे एक निश्चित पृष्ठ पर ताज़ा की अनुमति नहीं करने के लिए है?

मेरे पास कुछ लोग हैं जो केवल ताज़ा नहीं हैं और यह मेरी बैंडविड्थ को मार रहा है। यह एक गेम साइट है इसलिए मैं आईपी को प्रतिबंधित नहीं करना चाहता हूं।

+0

परीक्षण के लिए क्यों है? आप पोस्ट चर को भेजने के खिलाफ लड़ने की कोशिश कर रहे हैं? AJAX का प्रयोग करें। –

+0

क्या आपका मतलब है कि जब लोग पृष्ठ को रीफ्रेश करते हैं या केवल तभी जब वे पृष्ठ को F5 दबाकर रीफ्रेश करते हैं? स्पष्ट करें – colithium

+2

आप ऐसा क्यों करना चाहते हैं? – Randell

उत्तर

8
session_start(); 
if($_SESSION['hasbeenhere'] == 1) 
{ 
// Page refreshed 
} 
else 
{ 
    $_SESSION['hasbeenhere'] = 1; 
} 

यदि व्यक्ति के पास कुकीज़ सक्षम नहीं है, तो यह असफल हो जाएगा। अगर कोई अन्य पृष्ठ पर जाता है और वापस आता है, तो इसे ताज़ा के रूप में दिखाया जाएगा।

कुल मिलाकर, आप इसे इस तरह से नहीं कर सकते हैं जो सुनिश्चित है, लेकिन यह एक ही पृष्ठ को दो बार देखने से रोकने के लिए 1 तरीका है।

आपकी टिप्पणी के कारण, यदि आप लोगों को F5 200 बार दबाकर रोकना चाहते हैं, तो इसे आजमाएं।

$page = $_SERVER['REQUEST_URI']; 
// Defaults 
if(!isset($_SESSION[$page]['count'])) 
{ 
    $_SESSION[$page]['count'] = 1; 
    $_SESSION[$page]['first_hit'] = time(); 
    $_SESSION[$page]['banned'] = false; 
} 
else 
{ 
    $_SESSION[$page]['count']++; // Increase the counter 
} 

// If person is banned, end script 
if($_SESSION[$page]['banned'] == true) 
{ 
    die(); 
} 

if($_SESSION[$page]['first_hit'] < time() - 30) 
{ 
    $_SESSION[$page]['count'] = 1; // Reset every 30 seconds 
} 

if($_SESSION[$page]['count'] > 100) 
{ 
    $_SESSION[$page]['banned'] = true; 
    // Ban if they hit over 100 times in 30 seconds. 
} 
+0

ठीक है अगर वे एक अलग पृष्ठ पर जाते हैं और फिर इस पृष्ठ पर वापस आते हैं तो गिनती बढ़ जाएगी? या यह केवल ताज़ा करने के लिए है? चूंकि मुझे कोई अलग पृष्ठ पर जाने की बात नहीं है और फिर –

+0

वापस आ रहा है यह केवल वर्तमान पृष्ठ के लिए काम करता है, मुझे इसे –

+0

संशोधित करने दें, इसे आज़माएं। इसे थोड़ा बदलाव की आवश्यकता हो सकती है, लेकिन सभी मूल बातें वहां हैं। –

3

आप क्यों चाहेंगे?

लेकिन नहीं, ऐसा कोई रास्ता नहीं है जो लगातार काम करेगा जो इसे रोक सकता है।

+0

मेरे पास कुछ लोग हैं जो केवल F5 बटन नॉन स्टॉप दबा रहे हैं और यह मेरी बैंडविड्थ –

+1

को मार रहा है, फिर उन आईपी पतों पर प्रतिबंध लगाएं –

+0

कई हैं और मैं चाहता हूं कि उनमें से अधिकतर यह एक गेम साइट के लिए है। –

1

मुझे नहीं पता कि यह काम करेगा या नहीं, लेकिन क्या आप जावास्क्रिप्ट के साथ कीस्ट्रोक और F5 कीप्रेस पर सुन सकते हैं, जो भी आप चाहते हैं।

0

मुझे लगता है कि आप ऐसा कर सकता है:

session_start(); 

if (isset($_SESSION['visited'])) { 
    header("Location: http://the.page/you/want"); 
} else { 
    $_SESSION['visited'] = true; 
} 
0

आदेश ताज़ा से F5 रोकने के लिए, आप किसी भी प्रकार की ताज़ा अनुमति नहीं करना होगा। एक हैक के रूप में, आप querystring में एक टाइमस्टैम्प डालने का प्रयास कर सकते हैं। लोड पर, आप टाइमस्टैम्प के मान की जांच कर सकते हैं और यदि यह अतीत में है, तो दूसरे पृष्ठ पर रीडायरेक्ट करें। कुकीज अक्षम होने पर यह काम करेगा।

+0

** @ साइडप्रोजेक्ट: ** जब से लिंक बनाया जाएगा, लिंक हमेशा क्लिक किए जाने के समय के संबंध में पिछली बार होगा, यह काम नहीं करेगा। –

+0

सहमत हुए। एक और समाधान के साथ जाने के लिए सबसे अच्छा है। – sideproject

0

साइट स्वयं जावास्क्रिप्ट के साथ ऐसा करती है, इसलिए जब आप कुछ संपादित कर रहे होते हैं, तो आप इसे रीफ्रेशिंग, पीछे जाकर इत्यादि से नहीं हटाते हैं। शायद JQuery द्वारा परिभाषित कुछ घटना है जो आपको ऐसा करने देती है, इसलिए देखें वह, और उस घटना पर, इच्छित पृष्ठ पर रीडायरेक्ट करें (शायद उसी डोमेन के भीतर होना चाहिए)।

12

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

+0

मैं उस पर भी काम कर रहा हूं लेकिन मुझे अभी समाधान की आवश्यकता है। –

+2

अच्छी कॉल। यदि आपका होस्ट अपाचे सर्वर का उपयोग कर रहा है, तो यह संभावना है कि आपके पास आपके निपटारे में 'mod_deflate' और' mod_gzip' होगा। सही ढंग से कॉन्फ़िगर किया गया, ये टेक्स्ट सामग्री को संपीड़ित करेगा (जैसे HTML, जावास्क्रिप्ट, सीएसएस)। यदि आप PHP का उपयोग कर रहे हैं, तो शायद 'ob_start ("ob_gzhandler") पर एक नज़र डालें; '। – Gav

3

अपने PHP कोड में, निम्न कार्य करें:

if(isset($_SESSION["pagename-LAST_VIEWED"])) { 
    v = $_SESSION["pagename-LAST_VIEWED"]) 
    if(time() - v < 15) { 
     // user is refreshing more than once per 15 seconds 
     // send them something else and die 
     } 
} 
$_SESSION["pagename-LAST_VIEWED"] = time(); 

मेरी फालतू छद्म पीएचपी कृपया ध्यान न दें, यह मेरी दैनिक भाषा नहीं है।

यह दोनों पेज रीफ्रेश (F5) और उपयोगकर्ता को फिर से बुकमार्क पर क्लिक करने या फिर पता बार में एंटर दबाकर रोक देगा।

तुम भी आक्रामक कुछ कैशिंग मेटा टैग है और HTTP हेडर, जो कभी अपने सर्वर से टकराने से कुछ के रिफ्रेश कर पाएगा सक्षम सकता है, लेकिन इसके बाद के संस्करण कोड सुंदर स्केलेबल होना चाहिए।

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

0

ऐसा लगता है कि इस समस्या का कोई अच्छा तकनीकी समाधान नहीं है (अन्य उत्तरों ने बहुत अच्छी तरह से कवर किया है)। यदि उपयोगकर्ता लगातार इस पृष्ठ पर रीफ्रेश कर रहे हैं, तो मैं अनुमान लगा रहा हूं क्योंकि वे पृष्ठ को बदलने की उम्मीद करते हैं और वे दूसरी जानकारी चाहते हैं। शायद आपको पृष्ठ को रीफ्रेश करने के लिए अपना कारण लेना चाहिए। ऐसा करने का सबसे आसान तरीका शायद पृष्ठ अपडेट स्वयं कर रहा है (संभवतः AJAX के माध्यम से)। इस प्रकार उपयोगकर्ता वहां बैठ सकता है और अपडेट बस इसमें घुमाएंगे - एफ 5 को और अधिक परेशान नहीं करेगा, जो आपके बैंडविड्थ पर कट जाएगा, उल्लेख करने के लिए बेहतर उपयोगकर्ता अनुभव नहीं है।

0

यह आपके प्रश्न का उत्तर सीधे नहीं दे रहा है लेकिन आप शायद कैशिंग के साथ अपना मुद्दा हल कर सकते हैं?

आप एक हैडर कैश-नियंत्रण भेजते हैं: सार्वजनिक, अधिकतम उम्र = 120 कि ब्राउज़र का निर्देश देना चाहिए कि यह 2 मिनट के लिए पेज फिर से अनुरोध की जरूरत नहीं है और सिर्फ यह कैश है से प्रतिलिपि का उपयोग कर सकते । अगर वे ताज़ा करने के लिए नियंत्रण-एफ 5 का उपयोग कर सकते हैं लेकिन इसे बहुत मदद करनी चाहिए?

0

मुझे बस एक बहुत ही सरल समाधान पता है।

मेरे लिए

के बाद मैं सब $ _POST जानकारी प्रक्रिया और एक $ _SESSION वर मैं यह नहीं में लोगों को मैं की जरूरत को बचाने:

$_SESSION['admin']['PID']=session_id(); 
$_SESSION['admin']['user_user']=$_POST['user']; 
$_SESSION['admin']['user_pass']=$_POST['pass']; 
$_SESSION['admin']['last_access_time']=time(); 
if($_SERVER['REQUEST_METHOD']==="POST") 
{ 
    header("LOCATION:".$_SERVER['PHP_SELF']."?p=redirected"); 
} 

मेरे मामले में मैं उपयोगकर्ता मान्य करने के लिए कोशिश कर रहा था, और मेरे पास है समस्या यह है कि जब कोई लॉगआउट करता है और वापस जाता है और फिर साइट लोड को रीफ्रेश करता है, और इस सरल के साथ अगर मैंने अंततः इसे हल किया।

पीडी: "? पी = पुनर्निर्देशित" केवल वृश्चिक

संबंधित मुद्दे