login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Sring variabele in een cookie

Offline Broertjuhhh - 26/08/2015 17:55
Avatar van BroertjuhhhNieuw lid Hallo allemaal,

Na vele pogingen lukt het mij maar niet om bijv. $UserWidth in een cookie te krijgen ( zie script).

Plaatscode: 142471

Hoop dat iemand mij kan helpen.

Met vriendelijke groet, Mick

13 antwoorden

Gesponsorde links
Offline Thomas - 26/08/2015 20:06
Avatar van Thomas Moderator Waarschijnlijk is je doel om informatie over de browser van een gebruiker in te winnen?

Je zult dit dan ook aan de JavaScript-kant (client side) moeten regelen. Daar moet je de cookies aanmaken.

Vervolgens (na een page-refresh) heeft PHP (server side) beschikking over deze informatie. Doordat je deze informatie weer meestuurt met het request.

Ik kan wel een voorbeeldje in elkaar zetten hoe dit ongeveer in zijn werk gaat, maar mag ik vragen waar je dit voor wilt gebruiken? Is dit om keuzes te maken welke layout je toont? Tegenwoordig is daar dat hippe ding responsive design voor. Middels CSS kun je dan resolutie-breekpunten definiëren die bepalen hoe je pagina getoond wordt.

Of is dit voor iets heel anders bedoeld? Bijvoorbeeld het verzamelen van statistiek-gegevens ofzo?

Een alternatief is dat je rechtstreeks vanuit JavaScript een PHP script aanroept met in de URL de parameters (browserdata.php?width=X&height=Y&colordepth=Z), en dat je vervolgens een cookie set dat je deze informatie hebt binnengehaald. Dat is misschien een nettere oplossing.

Maar eerst is het misschien handig om te weten voor wat voor toepassing je deze informatie wilt gaan gebruiken.
Offline Broertjuhhh - 27/08/2015 10:37
Avatar van Broertjuhhh Nieuw lid Hallo FangorN,

Het doel van het script is, het ophalen van de browser gegevens van de bezoeker, die ik dan per e-mail verstuur naar mij zelf.

De gegevens zet ik dan in een excel bestandje om op den duur te kunnen zien waar de bezoekers van mijn site zoal mee werken.

Puur informatief en uitsluitend voor mij zelf.
Offline Thomas - 27/08/2015 14:12
Avatar van Thomas Moderator Okay, browserdata/statistieken dus. Waarom gooi je die gegevens niet meteen in een database trouwens? Ben je vertrouwd met het jQuery (JavaScript) framework? Ik denk dat daarmee wel wat eenvoudigs te maken is, bijvoorbeeld dat je op grond van een cookie al dan niet een AJAX-call doet naar een scriptje. Vervolgens stelt dit script een cookie in zodat maar 1x per bezoek de gegevens gelogd worden, in plaats van elke pagehit.
Offline Broertjuhhh - 27/08/2015 14:38
Avatar van Broertjuhhh Nieuw lid Hallo FangorN,

Nee, ik ben niet bekend met jQuery maar we kunnen altijd bij leren.
1x Per bezoek de gegevens loggen in plaats van elke pagehit klinkt interessant.
Het zou mooi zijn als ik ook te zien krijg welke pagina's een bezoeker bezocht heeft en hoe lang de bezoeker op de site aanwezig is geweest, is dat met jQuery ook mogelijk.
Heb je een voorbeeld in je jQuery ?
Offline Thomas - 27/08/2015 22:01
Avatar van Thomas Moderator Ik zal kijken of ik morgen iets eenvoudigs in elkaar kan zetten (en of het ook echt werkt zoals ik verwacht dat het doet ).

Als je meer statistieken wilt hebben: heb je Google Analytics al eens overwogen? Of een ander statistieken-verzamel-pakket? Die stukken functionaliteit zijn gespecialiseerd in het verzamelen van dat soort gegevens.

Ik ben niet echt thuis in GA (Google Analytics) maar gebruik het wel. Je kunt er volgens mij best veel mee, zo is het blijkbaar ook mogelijk om custom rapportages samen te stellen waar dus ook zaken als resolutie enzo in zitten.
Offline Broertjuhhh - 28/08/2015 09:57
Avatar van Broertjuhhh Nieuw lid Hallo FangorN,

Dat zou fantastisch zijn, ik ben zeer benieuwd en bij voorbaat mijn dank !

Ik weet dat Google Analytics bestaat, maar ik heb tijd genoeg om het zelf te analyseren en vind het erg leuk om zelf en/of met anderen een script te schrijven om zodoende de taal van het internet te leren.

Na het zien van de link blijf ik toch bij het bovenstaande, maar desalniettemin bedankt.
Offline Thomas - 28/08/2015 12:30 (laatste wijziging 28/08/2015 12:32)
Avatar van Thomas Moderator Wat je in feite met de onderstaande code bereikt is dat je data vanuit JavaScript (die niet in PHP zelf beschikbaar is) doorgeeft aan PHP.

index.htm
  1. <!DOCTYPE html>
  2. <meta charset="UTF-8">
  3. <title>stats test</title>
  4. <!-- laad jquery extern in, dit gaat waarschijnlijk sneller als je lokaal een versie installeert -->
  5. <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
  6. <!-- hulplibrary voor cookies, download de zip van https://github.com/js-cookie/js-cookie -->
  7. <script type="text/javascript" src="js.cookie.js"></script>
  8. </head>
  9.  
  10. <script type="text/javascript">
  11. //<![CDATA[
  12. $().ready(function() {
  13. // hebben we al data opgehaald voor deze sessie?
  14. if (Cookies.get('data_collected') === undefined) {
  15. // stuur AJAX request naar extern script die de data verder verwerkt
  16. $.ajax({
  17. 'url': 'collect_data.php',
  18. 'method': 'GET',
  19. // de data die je wilt versturen
  20. 'data': {
  21. 'screen_width': window.screen.width,
  22. 'screen_height': window.screen.height,
  23. 'color_depth': window.screen.colorDepth
  24. },
  25. // het type response wat je verwacht
  26. 'dataType': 'JSON',
  27. // functie die uitgevoerd moet worden na succesvolle aanroep
  28. 'success': function(data) {
  29. if (data.success) {
  30. alert('[debug] alle gegevens correct ontvangen');
  31. // set cookie
  32. Cookies.set('data_collected', 'hallo');
  33. } else {
  34. alert('[debug] er ging iets mis bij het verwerken van de gegevens');
  35. }
  36. }
  37. });
  38. } else {
  39. // extra check
  40. alert('[debug] gegevens reeds opgehaald voor deze sessie');
  41. }
  42. });
  43. //]]>
  44. </body>
  45. </html>


collect_data.php
  1. <?php
  2. // geef aan dat het "response type" JSON is
  3. header('Content-Type: application/json; charset=UTF-8');
  4.  
  5. // hulpfunctie
  6. function isNumber($in) {
  7. if (preg_match('#^[1-9][0-9]*$#', $in) == 1) {
  8. return (int) $in;
  9. }
  10. return false;
  11. }
  12.  
  13. // onderwerp je invoer aan een stricte controle
  14. $ok = false;
  15. $screenWidth = false;
  16. $screenHeight = false;
  17. $colorDepth = false;
  18.  
  19. if (isset($_GET['screen_width'])) {
  20. $screenWidth = isNumber($_GET['screen_width']);
  21. }
  22. if (isset($_GET['screen_height'])) {
  23. $screenHeight = isNumber($_GET['screen_height']);
  24. }
  25. if (isset($_GET['color_depth'])) {
  26. $colorDepth = isNumber($_GET['color_depth']);
  27. }
  28.  
  29. if ($screenWidth !== false && $screenHeight !== false && $colorDepth !== false) {
  30. $ok = true;
  31. }
  32.  
  33. // sla hier je gegevens op, je zou hier ook nog je user agent aan toe kunnen voegen enzo via $_SERVER variabelen
  34. if ($ok) {
  35. // ... doe iets met al je data, bijvoorbeeld opslag in een database ...
  36. }
  37.  
  38. // rapporteer status terug
  39. echo json_encode(array(
  40. 'success' => $ok,
  41. // optioneel kun je ook nog terugrapporteren wat je ontvangen hebt
  42. /*
  43.   'data' => array(
  44.   'width' => $screenWidth,
  45.   'height' => $screenHeight,
  46.   'depth' => $colorDepth,
  47.   ),
  48.   */
  49. ));
  50. ?>


Ik hoop dat je iets aan bovenstaande code hebt, en als je vragen hebt hoor ik het wel.
Offline Broertjuhhh - 30/08/2015 14:36
Avatar van Broertjuhhh Nieuw lid Hallo FangorN,

Klopt het als ik zeg dat ik, "index.htm" kan invoeg in mijn bestaande index.php op de betreffende platsen zijnde de "Head" en "Body" of kan ik dit ook op roepen met een "include" na dat ik eerst
"index.htm" een andere naam heb gegeven ?

En dat ik "collect_data.php" kan oproepen met een "include" in iedere page daar waar ik de gegevens nodig heb ?
Offline Thomas - 30/08/2015 15:36 (laatste wijziging 30/08/2015 15:38)
Avatar van Thomas Moderator Het enige wat je hoeft te doen om een opgevraagde pagina (eenmalig per bezoek / "sessie") te laten analyseren is:

1. het invoegen van de jquery-library en die cookie-library (download deze laatste als zip, pak het bestand uit en zet het js-bestand in je site) in het head-gedeelte van je pagina's

2. de javascript snippet, zet deze bij voorkeur aan het einde van je broncode, net voor je </body> tag, buiten enige andere tag.

Daarnaast zul je zelf collect_data.php af moeten schrijven, bijvoorbeeld in de vorm van het uitvoerne van een query die e.e.a. in een database opslaat.

collect_data.php is een standalone script, dus deze include je nergens - deze roep je aan via JavaScript, dat is de hele crux van deze oplossing - je geeft informatie door vanuit JavaScript aan een PHP-script zodat je hier aan de serverzijde de beschikking over hebt.
Offline Broertjuhhh - 01/09/2015 15:38
Avatar van Broertjuhhh Nieuw lid Hallo FangorN,

De javascripts heb ik en geplaatst in http://opdit.nl/js/

Dan nog een paar vraagjes voor alle zekerheid,

1. Zet ik de javascripts in iedere page of alleen daar waar ik de gegevens nodig heb ?

<script type="text/javascript" src="http://opdit.nl/js/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="http://opdit.nl/js/js.cookie.js"></script>

2. In welke page zet ik de javascript snippet ?
Offline Thomas - 01/09/2015 19:56
Avatar van Thomas Moderator Op alle pagina's waar je een sessie/bezoek wilt registreren zet je beide (zowel je javascript bestanden als het snippet) - deze werken samen om je clientside-data (via JavaScript) door te sturen naar je server (het PHP-script).

Dus op alle pagina's waar iemand binnen kan komen - meestal lijkt mij dit de homepage, tenzij iemand een andere pagina gebookmarked heeft.

De opzet is zodanig dat alleen op de binnenkomstpagina gegevens worden opgepikt, daarna wordt een cookie geset wat de rest van de sessie (de duur dat de browser(tab) open is) geldig blijft.

Als je je site een beetje handig hebt opgezet heb je één of enkele maintemplates - een soort van document-sjabloon waar je een aantal/een hoop/alle van je (dynamische) webpagina's aan ophangt. Je hebt hopelijk niet evenveel HTML/PHP-documenten waarin een volledig HTML-document staat als dat je uiteindelijk HTML-pagina's hebt wel?
Offline Broertjuhhh - 11/09/2015 11:20
Avatar van Broertjuhhh Nieuw lid Hallo FangorN,

Na een week ploeteren krijg ik het nog steeds niet voor elkaar.

Ik heb nu de onderstaande, zeker niet de mooiste oplossing gekozen.

Plaatscode: 142474

Wil je wel bij deze nog even bedanken voor al je moeite !

Een cookie maken lukt me nog wel, zie script.

Plaatscode: 142475

Maar het terug krijgen van de data op een andere page lukt me niet.

Offline Thomas - 11/09/2015 14:37 (laatste wijziging 11/09/2015 15:08)
Avatar van Thomas Moderator Even een aantal zaken om mogelijke misverstanden op te helderen:

Aan de ene kant van de internetlijn staat jouw PC, met daarop een besturingssysteem met daarin een browser, waarmee je een webpagina opvraagt.

Aan de andere kant van de internetlijn staat een webserver. Deze luistert naar verzoeken voor het opvragen van webpagina's. Als er een verzoek binnenkomt bakt de webserver -waarbij eventueel PHP-code wordt uitgevoerd- hier een webpagina van (in HTML) en stuurt deze terug naar de gebruiker.

Javascript wordt op jouw PC uitgevoerd.
Cookies staan op jouw PC.
Als je een webpagina opvraagt waar eerder cookies zijn ingesteld dan worden deze cookies mee (terug)gestuurd naar de webserver.

Als je middels JavaScript een cookie instelt dan staat lokaal een cookie ingesteld, maar is deze nog niet eerder naar de webserver (terug)gestuurd. Dit gebeurt pas op het moment je de pagina ververst. Voor dat moment heeft de webserver deze informatie nog niet terugontvangen.

EDIT: Daarnaast worden cookies normaal op directory basis (binnen een website) ingesteld. Als jij op pagina /lala.html een cookie set, is deze niet beschikbaar op een andere pagina in een andere directory (/directory/lala2.html). Als jij cookies geldig wilt laten zijn op het hele (sub)domein, dan moet je een path-argument toevoegen aan het cookie met waarde "/", dit wil zoveel zeggen als "op heel het (sub)domein geldig". De standaard instelling is "enkel in deze directory geldig", dus als je daar niets aan instelt is het cookie niet bekend op pagina's in andere directories.

Zoveel staat ook beschreven in de Cookies in JavaScript tutorial.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.178s