WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   24 timmars cookie (https://www.wn.se/forum/showthread.php?t=37453)

danielholking 2009-06-16 14:07

Har totalt kört fast, har en röstningsfunktion som bara ska gå att använda 1 gång per 24 timmar. Hur gör jag det enklast med en cookie.

Kimpo 2009-06-16 14:17

Vilket programmeringsspråk använder du?

Kimpo 2009-06-16 14:24

är inte php kodare men nåt i stil med

setcookie("namnpåcookie", "text" , time()+3600*24);

och sen en if check när nån försöker rösta så kan du försöka hämta cookien

$HTTP_COOKIE_VARS["namnpåcookie"];

Här är ett asp.net exempel

Skicka cookie till klienten
Response.Cookies["HasVotedBefore"].Value = "Voted";
Response.Cookies["HasVotedBefore"].Expires = DateTime.Now.AddDays(1);

sen ett enkelt if check
if (Request.Cookies["HasVotedBefore"] != null)

vco-systems 2009-06-16 20:33

Sätt lite kortare tid än 24 timmar, tex. 22 timmar. Det är inte säkert att användaren besöker sidan samma tid varje dag, om man kommer dit 1h tidigare en dag kan det vara irriterande att inte kunna röst. Samma sak om du kommer lite senare en dag så blir det problem att kunna rösta dagen efter.

greenio.se 2009-06-17 09:14

Annars kan du göra en cookie som håller sig bra mycket längre än en dag, och som värde ha datumet eller en timestamp, sen kan du jämföra om det är en ny dag för användaren i din röstningsfunktion. Då kan han rösta 9 på morgonen en dag och 11 på kvällen en annan och det funkar ändå.

t.ex. i php

Citat:


setcookie( 'lastVoted', time(), time() + (60*60*24*30) );

Sen jämför du när det är dags att rösta
Citat:


if ( date( "Y-m-d", $_COOKIE['lastVoted'] ) != date( "Y-m-d", time() ) ) {
// Inte samma datum som senaste rösten, du kan ju jämföra om det var 24 timmar sen om du hellre vill också
}


Är det på något sätt viktigt att det bara är en röst per dygn så skulle jag inte använda cookies för det här utan spara det i en databas istället. cookies är ju ganska lätt att radera för anvädaren. Är det inte blodigt allvar duger ju det där bra

danielholking 2009-06-17 09:18

Men hur visar man ett errormeddelande, tex "Du har redan röstat idag" när cookien anropas.

greenio.se 2009-06-17 09:47

Nu kanske du kan berätta vilket språk du jobbar i först? :)

danielholking 2009-06-22 10:58

Siten är uppbyggd av SHTML-sidor.

greenio.se 2009-06-22 11:55

Ok, ssi har inga funktioner för att hantera cookies vad jag vet. Vi fortsätter väl med php då.

Jag hade nog gjort något sånt här högst upp i koden.

Citat:


<?php
if ( date( "Y-m-d", $_COOKIE['lastVoted'] ) != date( "Y-m-d", time() ) ) {
// Registrera röst här

// Skriv cookie
setcookie( 'lastVoted', time(), time() + (60*60*24*30) );
$voteError = '';
} else {
echo "Du har redan röstat idag";
$voteError = '<span style="color:red">Du har redan röstat idag</span>';
}
?>

Och en ha <?php echo $voteError; ?> där du vill ha eventuellt felmeddelande.


Eftersom du inte har någon php-sida och då antagligen inte har .php som filändelse på filerna så kan du få problem med att php-koden aldrig körs.

Du behöver då skapa en .htaccess-fil som du lägger på servern med den här raden.

AddType application/x-httpd-php .html

eller .shtml eller vad du nu har för filändelse, det borde funka, men det beror lite på vad det är för server och hur den är konfigurerad.


Alla tider är GMT +2. Klockan är nu 03:10.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson