2015-05-31 6 views
5

का उपयोग कर अद्वितीय विचारों को अपडेट करना मेरे पास एक फोरम थ्रेड फ़ाइल thread.php है जो विषय आईडी जानकारी प्राप्त करता है।कुकीज़

उदाहरण:

thread.php?id=781

मैं एक अद्वितीय दृश्य सेटअप बनाने के लिए कोशिश कर रहा हूँ, लेकिन मैं अगर यह वास्तव में संभव है पता नहीं है:

thread.php:

topicId = <?php echo $_GET['id']; ?>; 

if ($.cookie("unique"+topicId)!=="1") { 
    $.cookie("unique"+topicId,1,{expires: 1000, path: '/'}); // create cookie if it doesn't exist 
    $.post('unique.php',{id:topicId}); // update thread unique views 
} 

unique.php

// connection stuff 

$id = mysqli_real_escape_string($conn,$_POST['id']); 
mysqli_query($conn,"UPDATE topics SET unique_views=unique_views+1 WHERE id='$id'"); 

यह प्रत्येक अलग थ्रेड के लिए एक नई कुकी तैयार करेगा। तो यदि उपयोगकर्ता 100 धागे देखता है, तो उनके पास 100 कुकीज़ संग्रहीत होंगी। मुझे चिंता है कि प्रत्येक धागे के लिए एक नई कुकी बनाने के लिए बहुत अधिक है। क्या यह ठीक है या ऐसा करने का एक बेहतर तरीका है?

उत्तर

3

यहां तक ​​कि संभव है, यह संसाधनों का अपशिष्ट है। उदाहरण के लिए, आपको JSON का उपयोग करके एक ही कुकी में अपने डेटा को क्रमबद्ध करना चाहिए।

जावास्क्रिप्ट में आप JSON.stringify साथ JSON स्ट्रिंग में अपने विषयों सरणी सांकेतिक शब्दों में बदलना कर सकते हैं:

$.cookie("cookie_name", JSON.stringify(topicsId_array)); 

तो फिर तुम JSON.parse साथ डेटा प्राप्त कर सकते हैं:

var topicsId_array = JSON.parse($.cookie("cookie_name")); 

याद रखें कि आप पुश जेएस विधि को सरणी (http://www.w3schools.com/jsref/jsref_push.asp) में तत्व जोड़ने के लिए उपयोग कर सकते हैं, ताकि आप डेटा प्राप्त कर सकें कुकी नए आईडी को धक्का के साथ जोड़ें और फिर इसे स्ट्रिंग के साथ सहेजें।

समाप्त करने के लिए, आपको डुप्लिकेट की परवाह करनी चाहिए। जब धक्का का उपयोग कर आप नहीं उन्हें चाहते हैं, आप https://api.jquery.com/jQuery.unique/ उपयोग कर सकते हैं सरणी स्पष्ट या इस तरह के रूप में एक खुद जे एस समारोह का उपयोग करने के:

function unique(array_source) 
{ 
    var array_destination = []; 
    var found = false; 
    var x, y; 

    for (x=0; x<array_source.length; x++) 
    { 
     found = false; 
     for (y=0; y<array_destination.length; y++) 
     { 
      if (array_source[x] === array_destination[y]) 
      { 
       found = true; 
       break; 
      } 
     } 
     if (!found) 
     { 
      array_destination.push(array_source[x]); 
     } 
    } 
    return array_destination; 
} 

var topicsId_array = ['aaa', 'bbb', 'ccc', 'aaa']; 
topicsId_array = unique(topicsId_array); 

और अंत में, कुछ इस तरह काम करना चाहिए:

var topicsId_array = JSON.parse($.cookie("cookie_name")) 
topicsId_array.push("your_new_id"); 
topicsId_array = $.unique(topicsId_array); 
$.cookie("cookie_name", JSON.stringify(topicsId_array));; 
+0

बस एक सवाल पर यह जारी रहती है - के बाद से यह topicId मूल्य "1" है कि एक के भीतर के साथ सेट है, तो जाँच करने के लिए की जरूरत है बड़ी कुकी और वास्तव में "1" के कुकी मान को स्टोर करने की ज़रूरत है, मैं इसे कैसे करूँगा और अगर कथन स्थापित करूँ? – frosty

+0

ठीक है, मेरे लिए यदि आप केवल उन विषयों को सहेजना चाहते हैं, तो आपको ** var subjectId_array = [1, 2, 4, 26]; ** (सरल और कुशल) जैसे आईडी सरणी का उपयोग करना चाहिए, इसलिए केवल सरणी में उन विषयों को अवश्य रहना चाहिए जो 1 पर सेट हैं (और दूसरों को हटाएं)।लेकिन यदि आप अपना मामला नहीं हैं और आपको अतिरिक्त डेटा (जैसे दृश्यों की संख्या या कुछ और) स्टोर करने की आवश्यकता है, तो आप ऑब्जेक्ट्स की एक सरणी का उपयोग कर सकते हैं और जो कुछ भी चाहते हैं उसे स्टोर कर सकते हैं। स्ट्रिंगिफ़ाई भी अच्छी तरह से काम करेगा। यहां आपके पास एक उदाहरण है: [http://jsfiddle.net/y11zLra7 ](http://jsfiddle.net/y11zLra7) –

0

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

मैं एक कुकी की तुलना में एक समाधान अन्य चुना होगा - सबसे अधिक संभावना है मैं सर्वर साइड

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