Ik heb een website voor een interim kantoor waarop meerdere vacatures staan. Als iemand wil inschrijven (solliciteren) voor een bepaalde job moet die naar de detailpagina gaan van die vacature. Daar staat een knop 'solliciteren'. Als je daarop drukt zal via ajax de velden van het formulier dat je te zien krijgt worden doorgestuurd naar een andere pagina die dan alles zal opslaan in database.
De detailpagina heeft in zijn ajax success een cookie die moet worden gezet. Vb cookienaam vacature en de vacature_id als value.
Iedere keer iemand wil inschrijven voor een bepaalde job zal die cookie terug worden overschreven, dus ik ben iedere keer de oude waarden kwijt. Meerder cookies met dezelfde naam kan volgens mij niet. Heeft iemand van jullie hiervoor een oplossing?
De bedoeling is dat iedere keer een werkzoekende op de website komt hij/zij dus geen 2x voor dezelfde job kan inschrijven.
Browsers gooien cookies niet weg als je hem sluit, tenzij je de date-expires op nul hebt gezet, of in cognito-mode werkt. Tegenwoordig slaan we browser-side data op in localstorage, dat is een stuk netter en betrouwbaarder want setcookies() is elke keer weer een gezeur omdat de call per browser verschilt.
Maar zoals gezegd; gegevens over welke vacatures een bezoeker bekijkt/bewerkt etc wil je altijd *serverside* opslaan.
Dat heeft twee redenen. Ten eerste wil jij inzicht in welke vacatures door wie worden bekeken en wanneer en waarom etc. Dat is van levensbelang voor je interne marketing.
Ten tweede is de database dynamisch; er komen records bij en gaan records af en er zullen ook wel eens records worden vervangen. Als alles is opgeslagen in een database dan worden al die wijzigingen automatisch meegenomen in de data van elke gebriuker. Als je de data browser-side opslaat zul je bij elke pageview opnieuw moeten kijken of de id's die zijn opgeslagen nog bestaan in de database, en actie moeten ondernemen als dat niet zo is. Dat is een intense berg werk die in feitte dus gewoon ON UPDATE CASCADE en ON DELETE RESTRICT nabouwt. Nee, niet ON DELETE CASCADE, want dat mag dus niet als je client-side opslaat... als een id server-side is weggehaald en client-side nog is bijgewerkt dan heb je een gigantisch probleem...
Kortom: geef je bezoeker een uniek id in z'n localstorage of cookie, en sla de rest allemaal server-side op.
@Pg Vincent: ik denk dat jouw oplossing de beste is. Ik heb alles mooi opgeslagen in database en een cookie gezet met een uniek user_id. at is bij iedere user steeds dezelfde. En dan doe ik een check of de vacature_id en de user_id voorkomt in de database. Werkt goed zo.
>> Browsers gooien cookies niet weg als je hem sluit, tenzij je de date-expires op nul hebt gezet, of in cognito-mode werkt.
Daar maak je een kleine denkfout. JIJ als programmeur kunt een cookie wel dusdanig instellen dat deze blijft bestaan, maar IK als gebruiker kan mijn browser zo instellen dat ALLE cookies worden verwijderd als ik m'n browser afsluit. Een cookie is nooit 100% betrouwbaar omdat deze zich aan de gebruikerskant bevindt en je daar nooit 100% controle op hebt.
Dat gezegd hebbende ...
Waarom zou überhaupt iemand zich 2 keer voor dezelfde vacature inschrijven? Dan ben je wel vrij stom bezig lijkt me.
Maar goed, als je het op een betere manier wil afvangen, dan zou je kunnen controleren op e-mailadres. Je laat iemand eerst z'n e-mailadres invullen waarna je controleert of dat e-mailadres zich al heeft ingeschreven. Aangezien een e-mailadres uniek is, is dit wellicht een meer solide oplossing.
Waarom zou überhaupt iemand zich 2 keer voor dezelfde vacature inschrijven? Dan ben je wel vrij stom bezig lijkt me.
Pretty much this.
Daarnaast. Soms heb je eenzelfde vacature die opnieuw wordt uitgezet. Nieuwe ronde, nieuwe kansen. Met de huidige constructie zou iemand hier dan niet nogmaals op kunnen reageren?
Ik denk dat hier sprake is van overautomatisering. Ik bedoel, komt het ooit voor dat iemand meerdere keren solliciteert op eenzelfde vacature (met uitzondering van bovenstaande situatie)? Is dit echt een reëel scenario? Het klinkt nogal vergezocht allemaal. Wat gebeurt er in het ergste geval? Dat een kandidaat niet wordt uitgenodigd? Please.
>> Of wat als er 2 mensen in 1 gezin op dezelfde vacature willen reageren.
Die hebben gelukkig allemaal een eigen gebruikersaccount, dus eigen cookies, net zoals mijn gewone internetaccount in Google Chrome wel cookies heeft en mijn beheerdersaccount in Mozilla Firefox helemaal geen. ;-)
Als je dit soort problemen toch wilt overautomatiseren, zou ik eerst eens kijken naar iets dat ook voor gebruikers zelf voordelen heeft. Denk bijvoorbeeld aan een gebruikersaccount: daarmee kun je bijvoorbeeld de personalia voor volgende sollicitaties alvast invullen en op basis van eerdere sollicitaties suggesties voor andere vacatures doen.
>> Die hebben gelukkig allemaal een eigen gebruikersaccount
Ook dat is weer een veronderstelling die in lang niet alle gevallen opgaat. Genoeg huishoudens waar gewoon één account wordt gebruikt en iedereen dus van dezelfde browser en browserinstellingen gebruikmaakt.