By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,403 Members | 855 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,403 IT Pros & Developers. It's quick & easy.

link tracker with cookie to stop repeat clicking

100+
P: 229
Hi, I have this very nice link tracker script that works a treat.
The only thing is it doesnt restrict repeat clicking.

Is there a simple method to add a cookie feature to this so that people cannot vote twice. I prefer cookies over ip recording. Any pointers would be a great help.


Expand|Select|Wrap|Line Numbers
  1. %@ Language=VBScript %>
  2. <%
  3. Option Explicit              ' Never code without it!
  4. Response.Buffer = True       ' Make sure we can redirect later
  5.  
  6. ' The constants I use in this script...
  7. ' pulled directly from adovbs.inc
  8. Const adOpenForwardOnly = 0
  9. Const adOpenDynamic = 2
  10. Const adLockReadOnly = 1
  11. Const adLockPessimistic = 2
  12. Const adCmdText = &H0001
  13.  
  14. ' This needs to be ' for SQL Server and # for Access
  15. Const DATE_DELIMITER = "#"
  16.  
  17. Dim strName                  ' Friendlyname of the redirect
  18. Dim strId                  ' id the redirect
  19. Dim cnnLinkTracker           ' ADO objects
  20. Dim rsLinkTracker
  21. Dim strSQL                   ' SQL command building area
  22. Dim iRedirectId              ' id of the redirect for logging process
  23.  
  24. ' Get name of location to go to
  25. ' I simply call this name so to call the script it would look
  26. ' something like this:
  27. ' http://server/linktracker.asp?id=asp101
  28. ' where asp101 is the friendly id from the database
  29. strId = Request.QueryString("id")
  30.  
  31. ' Make it DB friendly just in case a ' got in somehow
  32. strId = Replace(strId, "'", "''")
  33.  
  34. ' Create a new connection
  35. Set cnnLinkTracker = Server.CreateObject("ADODB.Connection")
  36.  
  37. ' Your connection string goes here!
  38. ' This one expects an Access database in the same place as this script
  39. cnnLinkTracker.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
  40.     Server.MapPath("/xxxxxxxxxxxx"), "", ""
  41.  
  42. ' Create a recordset
  43. Set rsLinkTracker = Server.CreateObject("ADODB.Recordset")
  44.  
  45. ' Get the record we're looking for by passing it the name
  46. ' we got from the QueryString.  I'm prebuilding the SQL command
  47. ' to make it easier to debug if we need to.
  48. strSQL = "SELECT PostCard, Headline  FROM tblGreet " & _
  49.     "WHERE PostCardID=" & strId & ";"
  50. ' Quick and dirty debugging when something goes wrong.
  51. 'Response.Write strSQL
  52.  
  53. ' Send the command to the database to get the appropriate records
  54. rsLinkTracker.Open strSQL, cnnLinkTracker, _
  55.     adOpenForwardOnly, adLockReadOnly, adCmdText
  56.  
  57. ' If we got back any results then we know where to send them
  58. ' o/w I just send them to our home page for lack of a better
  59. ' place to send them.
  60. If Not rsLinkTracker.EOF Then
  61.     ' Get redirect Id # from recordset
  62.     iRedirectId = rsLinkTracker.Fields("PostCard").Value
  63.  
  64.     ' Get location to send the user to
  65.     strName = rsLinkTracker.Fields("Headline").Value
  66.  
  67.     ' We've got all the info we need so close our recordset
  68.     rsLinkTracker.Close
  69.  
  70.     ' I now recycle the recordset for the logging process.
  71.     ' Lots of people would argue with me about this, but I
  72.     ' know I'm doing it and this is my code so if you don't
  73.     ' like it feel free to change it, but I'm not going to!
  74.  
  75.     ' Start logging process
  76.  
  77.     ' Build out SQL String ahead of time.
  78.     ' This should get us the record containing the information
  79.     ' for the selected link for today's date if one exists.
  80.     strSQL = "SELECT link_id, hit_date, hit_count " & _
  81.         "FROM tblLinkTrackerLog " & _
  82.         "WHERE link_id = " & iRedirectId & " " & _
  83.         "AND hit_date = " & DATE_DELIMITER & Date() & DATE_DELIMITER
  84.  
  85.     ' Standard debugging step when something goes wrong!
  86.     'Response.Write strSQL
  87.  
  88.     ' Send the command.
  89.     rsLinkTracker.Open strSQL, cnnLinkTracker, _
  90.         adOpenDynamic, adLockPessimistic, adCmdText
  91.  
  92.     ' If it's EOF then it's the first hit of the day and we need
  93.     ' to add a new record o/w we simply update the existing hit
  94.     ' count of the record by adding one to it.
  95.     If rsLinkTracker.EOF Then
  96.         rsLinkTracker.AddNew
  97.  
  98.         rsLinkTracker.Fields("link_id").Value   = iRedirectId
  99.         rsLinkTracker.Fields("hit_date").Value  = Date()
  100.         rsLinkTracker.Fields("hit_count").Value = 1
  101.     Else
  102.         rsLinkTracker.Fields("hit_count").Value = _
  103.             rsLinkTracker.Fields("hit_count").Value + 1
  104.     End If
  105.  
  106.     ' Save changes to the data
  107.     rsLinkTracker.Update
  108. Else
  109.     ' If no match send em to our home page
  110.     strName = "/"
  111. End If
  112.  
  113. ' Close our recordset object
  114. rsLinkTracker.Close
  115. Set rsLinkTracker = Nothing
  116.  
  117. ' Kill our connection
  118. cnnLinkTracker.Close
  119. Set cnnLinkTracker = Nothing
  120.  
  121. ' Send them on their merry way using the location we got
  122. ' from the database!
  123. Response.Redirect "http://" & strName
  124. %>

Thanks
Richard
Mar 8 '08 #1
Share this Question
Share on Google+
2 Replies


100+
P: 229
Hi, I got this cookie if clause done but it doesnt seem to work. I mean it doesnt stop someone clicking 100 times, it will record all 100. It is meant to, with the use of the cookie to stop after the first. Can anyone see why? Any help would be great.
Thanks
Richard


Expand|Select|Wrap|Line Numbers
  1.  ' Send the command.
  2.  rsLinkTracker.Open strSQL, cnnLinkTracker, _
  3.   adOpenDynamic, adLockPessimistic, adCmdText
  4.  
  5.     'Establish cookie for unique hit Counting
  6.  
  7.   Response.Cookies("Visited").Expires=date+1 
  8.   strVisited = Request.Cookies("Visited")
  9.  
  10.  ' If it's EOF then it's the first hit of the day and we need
  11.  ' to add a new record o/w we simply update the existing hit
  12.  ' count of the record by adding one to it.
  13.  
  14.  If rsLinkTracker.EOF Then
  15.   rsLinkTracker.AddNew
  16.  
  17.   rsLinkTracker.Fields("link_id").Value   = iRedirectId
  18.   rsLinkTracker.Fields("hit_date").Value  = Date()
  19.     rsLinkTracker.Fields("hit_count").Value = 1
  20.  
  21.     Response.Cookies("Visited") = "yes"
  22.     ' Save changes to the data
  23.    rsLinkTracker.Update
  24.  Else
  25.    If strVisited = "" Then
  26.         Response.Cookies("Visited") = "yes"
  27.         'Increment the visitor counter number by 1
  28.         rsLinkTracker.Fields("hit_count").Value + 1
  29.         ' Save changes to the data
  30.     rsLinkTracker.Update
  31.     End If     
  32.  End If
Mar 11 '08 #2

jhardman
Expert 2.5K+
P: 3,405
How do you check when you record votes whether they have the cookie?

Jared
Mar 18 '08 #3

Post your reply

Sign in to post your reply or Sign up for a free account.