Delete rij in database na een dag

Pagina: 1
Acties:

  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Ik ben bezig met een internet site waar mensen kunnen inloggen.
Nu ben ik aan na denken om het wachtwoord te kunnen opvragen.

Ik zat te denken om het nieuwe wachtwoord in een tabel te zetten en dan krijg die gebruiker een mail met een link.
Als ze op die link drukken wordt het wachtwoord van uit die tabel naar de gebruikers tabel gezet en wordt dus dan pas actief.
Dan wordt gelijk de gegevens in de recover tabel verwijderd.

Nu zit ik dus ook te denken stel iemand vraagt het wachtwoord op maar reageer niet.
Dan zal die dus nutteloos in die tabel blijven staan.
Hoe kan ik zorgen dat er automatisch na 24 uur het wordt gedelete uit de recover tabel.

Verwijderd

Of je voegt een veld toe met user_type en zet die initieel op user_unconfirmed tezamen met een veld create_time.

Elke nacht/uur/ half uur/ 2 uur draai je een script die dat veld create_time vergelijkt met current_time en indien create_time + 24 uur < current_time -> delete row.

Simpel toch :)

  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Ofwel schedulen, maar de meest logische oplossing is om bij elke
activatie (dat url), eerst alles ouder dan 24 uur te deleten en daarna
de betreffende code ophalen.

  • spaceboy
  • Registratie: Februari 2001
  • Laatst online: 04:40

spaceboy

Op grote hoogte

schoningscriptje draaien elke avond/24 uur, en een status bijhouden wanneer wachtwoord is aangevraagd...

IF <tijdstip aanvraag is langer dan 24 uur geleden>
THEN <wissen>

zoiets?

Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:57

TeeDee

CQB 241

Mjah, is het nu zo erg dat er een aantal records in de db blijven staan?
Wat je zou kunnen doen is bij elke 'verificatie' even de tabel doorlopen om te kijken of er nog een record open staat en tijd > 24 uur. >> Delete record.

Verder zou je dit ook met cron(*nix) en taakplanner (windows) kunnen doen.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Ik doe wat CRISIS zeg gewoon als iemand op de activerings pagina komen de tabel legen.
Weet namelijk niet hoe ik automatische een script kan laten draaien - ik laat het namelijk hosten.

[ Voor 59% gewijzigd door vitrix op 20-03-2006 16:33 ]


Verwijderd

vitrix schreef op maandag 20 maart 2006 @ 16:31:
Ik doe wat CRISIS zeg gewoon als iemand op de activerings pagina komen de tabel legen.
Weet namelijk niet hoe ik automatische een script kan laten draaien - ik laat het namelijk hosten.
Dat kan dan waarschijnlijk, zeer waarschijnlijk niet :)

Kan wel vrij heavy worden als je veel users krijgt die zich registreren, maar dan heb je aan shared hosting ook te weinig :+

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 24-02 18:45

DexterDee

I doubt, therefore I might be

Je hebt helemaal geen scheduled proces nodig als je het iets anders aanpakt.

Als je nu gewoon eens in de usertabel het veldje 'activation_code' opneemt. De activation code is een random string van letters en cijfers (bijv. een MD5 van de huidige datum+tijd en een vaste string) die je berekent als de user zijn wachtwoord wil resetten. Als deze uniek genoeg is en niet te raden valt in combinatie met zijn username, kun je een pagina maken waarbij de user een nieuw wachtwoord kan intikken bij het invoeren van zijn username. Voor extra veiligheid kun je na 3x een foute activation code de user locken. Zo voorkom je brute force attacks op dit mechanisme.

Doordat de activation code in de url zit en alleen verstrekt wordt middels de verzonden e-mail naar de user, ben je vrij veilig en hoef je geen passwords tijdelijk op te slaan en weer weg te gooien.

[ Voor 42% gewijzigd door DexterDee op 20-03-2006 16:40 ]

Klik hier om mij een DM te sturen • 3245 WP op ZW


Verwijderd

DexterDee: dat vroeg de TS helemaal niet :? Hij wil dat, wanneer users niet op de link klikken, deze rijen uit de database verwijderd worden :)

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 24-02 18:45

DexterDee

I doubt, therefore I might be

Verwijderd schreef op maandag 20 maart 2006 @ 16:37:
DexterDee: dat vroeg de TS helemaal niet :? Hij wil dat, wanneer users niet op de link klikken, deze rijen uit de database verwijderd worden :)
Ik had het niet goed verwoord en heb mijn post aangepast. Mijn suggestie gaat trouwens over een alternatieve manier om dit probleem op te lossen zodat je de noodzaak niet hebt voor een scheduled proces, een tijdelijke tabel en een in clear text opgeslagen wachtwoord.

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Ik ben deze site voor stage aan het maken.
Het is bedoelding dat begin rustig zal verlopen en verloop van tijd meer mensen opkomen.
Ik ga het aanpakken als crisis zei gewoon controleren als iemand op recovery page kom.
Dank u alleen voor de hulp.

[ Voor 7% gewijzigd door vitrix op 20-03-2006 16:56 ]


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02

bvp

vitrix schreef op maandag 20 maart 2006 @ 16:56:
Ik ben deze site voor stage aan het maken.
Het is bedoelding dat begin rustig zal verlopen en verloop van tijd meer mensen opkomen.
Ik ga het aanpakken als crisis zei gewoon controleren als iemand op recovery page kom.
Dank u alleen voor de hulp.
Tja ik zou idd ook gewoon blind voor de eerste de beste oplossing gaan 8)7
De oplossing die DexterDee aangedragen heeft is echt helemaal zo slecht nog niet en is zeker ook niet de eerste keer dat dit zo gebruikt wordt!
Als jij je stage-bedrijf kunt overtuigen dat dit een veel mooiere/elegantere oplossing is, dan ben je er toch ook en zal het bedrijf je zelfs alleen maar meer kunnen waarderen om je aangedragen oplossing?"

Maarrr, als je dan toch voor die oplossing wilt gaan, kan ik je misschien nog wel een kleine tip meegeven.
Doe niet elke keer zomaar als eerste bij elke keer dat die URL opgevraagd wordt dat delete-script doorlopen.
Kan namelijk bij erg veel users wel es voor serieuze performance problemen gaan zorgen?

Je kunt hiervoor in de plaats wel een extra tabel/row aanmaken die kijkt of het script al gedraaid heeft die dag.
En op je index.php een kleine check die controleert of het al de volgende dag is, zo ja, zet dan de tabel DELETE_SCRIPT_ACTIVATED weer op false.

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 23-02 17:28
In welke omgeving doe je dit?
Indien een .Net omgeving met MSSQL database, kun je hiervoor toch gewoon een stored procedure gebruiken?

  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Dus b.v. 2 rijen toevoegen - activatiecode / block.
Als iemand op wachtwoord vergeten druk voert hij zijn username en email in.
Er wordt dan gekeken of die in de gebruikers tabel voor kom en of block niet block is.
Zojah dan wordt er een unique code aangemaakt in activatiecode.
er wordt link naar een wijzig wachtwoord gestuurt met daarin de activatiecode.
Daar moet hij/zij dan de username invoeren en de activatiecode.
Als de code fout is komt er een 1 en daarna een 2 in block te staan.
Bij drie komt er block en kan de user niet meer proberen.

zo zal ik het proberen - dus toch naar dexterdee
Ik gebruik php met mysql

[ Voor 6% gewijzigd door vitrix op 21-03-2006 08:58 ]


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 24-02 18:45

DexterDee

I doubt, therefore I might be

Inderdaad Vitrix. En de activatiecode kun je gewoon in de URL zetten die je in de e-mail zet, zodat de gebruiker deze niet hoeft in te voeren. Ook de gebruikersnaam kan in de vorm van het database id in de URL. Dus zoiets als: www.server.com/passwordve...iecode=ABC123DEF765JKL987
De pagina bevat vervolgens de username opgehaald van het user ID en twee veldjes met nieuw wachtwoord en nogmaals nieuw wachtwoord. Bij het doorsturen van dit formulier update je het ingevoerde wachtwoord met de gebruiker, gooi je de activatiecode uit het user record en log je de gebruiker in. Zorg er trouwens wel voor dat je nooit met een lege activatiecode een nieuw wachtwoord kunt aanvragen als je iemands user id hebt.

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Als er op submit wordt gedrukt dan wordt er gecontroleert of er een gebruikersnaam is met dat activeringscode.
b.v. zo:

$check = mysql_query("SELECT activatiecode FROM users WHERE activatiecode LIKE '$activatie' AND username LIKE '$name'");
if (mysql_num_rows($check) == '0') {
$gaverder = 'true';
} else {
$gaverder = 'false';
}

  • Paul
  • Registratie: September 2000
  • Laatst online: 22:05
Waarom LIKE als de gevonden waardes gewoon 100% gelijk moeten zijn? Volgens mij is een = VEEEEEL goedkoper dan een like ;)

Ook hoop ik dat je die $user en $activtie eerst controleert op gevaarlijke content voordat je ze zo aan de DB voert?

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 24-02 18:45

DexterDee

I doubt, therefore I might be

Nooit met like werken in deze situatie, omdat dat de beveiliging vermindert. Als je activatie URL de volgende attributen heeft:

?user=6&activatie=ABCDEFG

Dan check je dat bijvoorbeeld met de volgende PHP code:

$user_id = mysql_real_escape( $_GET['user'] );
$activatie_code = mysql_real_escape( $_GET['activatie'] );

$check = mysql_query("SELECT count(*) FROM users WHERE activatiecode='$activatie_code' AND id='$user_id'");

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02

bvp

DexterDee schreef op dinsdag 21 maart 2006 @ 10:15:
Nooit met like werken in deze situatie, omdat dat de beveiliging vermindert. Als je activatie URL de volgende attributen heeft:

?user=6&activatie=ABCDEFG

Dan check je dat bijvoorbeeld met de volgende PHP code:

$user_id = mysql_real_escape( $_GET['user'] );
$activatie_code = mysql_real_escape( $_GET['activatie'] );

$check = mysql_query("SELECT count(*) FROM users WHERE activatiecode='$activatie_code' AND id='$user_id'");
Waarom count? Je wilt toch weten of DIE user DIE activatie-code heeft?

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 24-02 18:45

DexterDee

I doubt, therefore I might be

bvp schreef op dinsdag 21 maart 2006 @ 10:20:
[...]


Waarom count? Je wilt toch weten of DIE user DIE activatie-code heeft?
Kan, maar ik check ook altijd of ik maar 1 record terug krijg. Krijg ik meer records terug, dan klopt er iets niet in mijn database. Misschien niet zo toepasselijk in deze situatie maar ik gebruik het meestal als extra beveiliging :)

@Paul Nieuwkamp: Zoals ik hierboven al zei, in dit specifieke voorbeeld heeft de count natuurlijk niet echt toegevoegde waarde. Het id is neem ik aan een primary key en kan maar 1 keer voorkomen in de database. Er zijn echter constructies waarbij de key niet uniek hoeft te zijn :Y)

[ Voor 26% gewijzigd door DexterDee op 21-03-2006 10:27 ]

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • Paul
  • Registratie: September 2000
  • Laatst online: 22:05
Dat weet je dan toch ook? Tel het aantal records waar die user die activatiecode heeft.

Komt er 0 uit dan heeft die user een andere activatiecode, of die user bestaat niet, komt er 1 uit dan heeft die user inderdaad die activatiecode en komt er meer dan 1 uit dan zit er iets mis in je datamodel :P

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Als ik mysql_real_escape(); of mysql_real_escape_string(); doe krijg ik de volgende error.

Parse error: parse error in c:\apache\htdocs\corne\veiling\aanmelden.php on line 7

ik doe addslashes(); op de variables die ik in de mysql zet.
is dat ook goed ?
Ik doe die count ook gewoon voor wat extra beveiling.
Zou niet kunnen dat ik meer lines dan 1 krijg.
Je kan ook gelijk een melding geven als je niets gevonden heeft.
B.v. het wijzigen is mislukt mogelijk is uw gebruikersnaam of activatiecode verkeerd.

[ Voor 54% gewijzigd door vitrix op 21-03-2006 11:45 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:57

TeeDee

CQB 241

vitrix schreef op dinsdag 21 maart 2006 @ 11:12:
Als ik mysql_real_escape(); of mysql_real_escape_string(); doe krijg ik de volgende error.

Parse error: parse error in c:\apache\htdocs\corne\veiling\aanmelden.php on line 7

ik doe addslashes(); op de variables die ik in de mysql zet.
is dat ook goed ?
Ik doe die count ook gewoon voor wat extra beveiling.
Zou niet kunnen dat ik meer lines dan 1 krijg.
Je kan ook gelijk een melding geven als je niets gevonden heeft.
B.v. het wijzigen is mislukt mogelijk is uw gebruikersnaam of activatiecode verkeerd.
Parse errors kan je altijd zelf debuggen. Denk aan een ;, } of een ) ergens teveel/weinig.
Gebruik een editor met syntax highlighting en je ziet de fout. Desnoods maak je een nieuwe reply, plak je code in een [code=php] tag op dit forum, en je ziet de fout dan ook al meestal.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
Ik heb ze even overnieuw getyped en krijg nu dat die de functie niet ken.
Maar bij mysql_real_escape_string() wordt die wel blauw :S

Fatal error: Call to undefined function: mysql_real_escape_string() in c:\apache\htdocs\corne\veiling\recoverinput.php on line 10

of anders

Fatal error: Call to undefined function: mysql_real_escape() in c:\apache\htdocs\corne\veiling\recoverinput.php on line 10

$activatie_code = mysql_real_escape(trim($_GET['activatie']));
$wachtwoord = mysql_real_escape_string(trim($_POST['wachtwoordform']));

[ Voor 15% gewijzigd door vitrix op 21-03-2006 12:35 ]


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02

bvp

vitrix schreef op dinsdag 21 maart 2006 @ 12:35:
Ik heb ze even overnieuw getyped en krijg nu dat die de functie niet ken.
Maar bij mysql_real_escape_string() wordt die wel blauw :S

Fatal error: Call to undefined function: mysql_real_escape_string() in c:\apache\htdocs\corne\veiling\recoverinput.php on line 10

of anders

Fatal error: Call to undefined function: mysql_real_escape() in c:\apache\htdocs\corne\veiling\recoverinput.php on line 10

$activatie_code = mysql_real_escape(trim($_GET['activatie']));
$wachtwoord = mysql_real_escape_string(trim($_POST['wachtwoordform']));
Versie van PHP verschil?
Welke versie gebruik je?

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 24-02 18:45

DexterDee

I doubt, therefore I might be

de functie mysql_real_escape_string zit vanaf versie 4.3.0 in PHP. Als jouw PHP versie nog lager is zou ik zeker eerst PHP upgraden. Er zijn gigantisch veel wijzigingen en security patches geweest. De kans is heel groot dat andere scripts ook niet vlekkeloos draaien. De laatste versie van PHP4 is op dit moment 4.4.2 :)

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • vitrix
  • Registratie: Januari 2006
  • Laatst online: 23-08-2021
ik zit via phptraid te runnen local.
ff kijken of ik de php kan upgrade
Pagina: 1