[ASP.NET] Cookie Winkelmand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zer0cool12342
  • Registratie: April 2005
  • Laatst online: 05-08 22:31
Beste mede Tweakers,

Ik/wij zijn nog steeds druk bezig met de webwinkel voor een school project, vorige keer had ik een vraag over repeaters mede dankzij jullie is dat gelukt alleen loop ik nu weer tegen het volgende op.

Hier een klein voorbeeld zoals het nu is er moet nog opmaak worden toegepast:
Afbeeldingslocatie: http://www.plaatjesupload.nl/bekijk/2009/11/23/1258995107-260.jpg

Maar mijn vraag is als volgt:

Ik heb nu even tijdelijk zoals te zien is op het plaatje 2 listboxen gebruikt om de informatie in op te slaan als ik op het winkelmandje druk.

Maar deze informatie moet ik een cookie komen en vervolgens in het winkelmandje komen tijdelijk.

Nou heb ik het mijn leraar nog gevraagt die kan mij hellaas niet verder helpen, ik heb zelf ook al een dag op google rond gezocht maar niet echt een goed voorbeeld kunnen vinden.

Het is dus de bedoeling dat ik het artikelen tijdelijk in een cookie krijg met Artikel_code, Aantal, Artikel_Prijs
maar nu moet het ook werken dat als ik artikel 1 neem en vervolgens 2 en dan weer 1 dat hij het wel bij elkaar optelt.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private void AddToShoppingCart(string ProductID)
    {
        if (Request.Cookies["ShoppingCart"] == null)
        {
            HttpCookie oCookie = new HttpCookie("ShoppingCart");
            //Set Cookie to expire in 3 hours
            oCookie.Expires = DateTime.Now.AddHours(3);
            oCookie.Value = ProductID.ToString();
            Response.Cookies.Add(oCookie);
        }
        else
        {
            bool bExists = false;
            char[] sep = { ',' };
            HttpCookie oCookie = (HttpCookie)Request.Cookies["ShoppingCart"];
            //Set Cookie to expire in 3 hours
            oCookie.Expires = DateTime.Now.AddHours(3);
            //Check if Cookie already contain same item
            string sProdID = oCookie.Value.ToString();

            string[] arrCookie = sProdID.Split(sep);

            for (int i = 0; i < arrCookie.Length; i++)
            {
                if (arrCookie[i].Trim() == ProductID.ToString().Trim())
                {
                    bExists = true;
                }
            }
            if (!bExists)
            {
                if (oCookie.Value.Length == 0)
                {
                    oCookie.Value = ProductID.ToString();
                }
                else
                {
                    oCookie.Value = oCookie.Value + "," + ProductID;
                }
            }

            //Add back into  the Response Objects.
            Response.Cookies.Add(oCookie);
        }
    }


Met bovenstaand stuk code heb ik al zitten stoeien maar ik krijg het niet zoals het moet.

Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 15:03
Wat lukt er dan niet? En waarom wil je de prijs ook in je cookie hebben staan?

Acties:
  • 0 Henk 'm!

  • Zer0cool12342
  • Registratie: April 2005
  • Laatst online: 05-08 22:31
het lukt me niet om het aantal er in te krijgen en als ik bijvoorbeeld artikel 1, twee keer wil en later toch nog 1 er bij wil hoe ik dat in het koekje moet updaten en de prijs wil ik er in om het subtotaal rechts aan de pagina wil weergeven. hoop dat het zo duidelijker is.

Acties:
  • 0 Henk 'm!

  • jp
  • Registratie: November 2000
  • Laatst online: 03-07 15:30

jp

Ten eerste, de prijs wil je echt niet in je cookie opslaan. Maar is het een eis dat de hele winkelmand in de cookie gezet wordt? Het lijkt mij persoonlijk handiger om de hele winkelmand in de database op te slaan, en in je cookie alleen een verwijzing naar de PK van die winkelmand...

Wel zo nu en dan 'oude' winkelmandjes leegruimen, maar dat is een functie die je periodiek of gewoon in je global.asax kan uitvoeren. :)

Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 15:03
Ik weet niet in hoeverre je bekend bent met verschillende datastructuren, maar aangezien ik zie dat je een lijstje doorloopt en string-vergelijkingen doet en je met je huidige probleem zit, denk ik niet dat je al eens kennis hebt gemaakt met een (I)Dictionary of een NameValueCollection?
Als je die datastructuren een beetje door hebt is denk ik de oplossing niet zo moeilijk meer, zeker niet als je ziet dat een cookie ook bepaalde mogelijkheden heeft. Dan zou je op basis van je productid toch interessante dingen kunnen doen :)

Acties:
  • 0 Henk 'm!

  • Zer0cool12342
  • Registratie: April 2005
  • Laatst online: 05-08 22:31
jp schreef op maandag 23 november 2009 @ 21:16:
Ten eerste, de prijs wil je echt niet in je cookie opslaan. Maar is het een eis dat de hele winkelmand in de cookie gezet wordt? Het lijkt mij persoonlijk handiger om de hele winkelmand in de database op te slaan, en in je cookie alleen een verwijzing naar de PK van die winkelmand...

Wel zo nu en dan 'oude' winkelmandjes leegruimen, maar dat is een functie die je periodiek of gewoon in je global.asax kan uitvoeren. :)
Het is geen eis maar dit is de enigste manier die ik kon bedenken, de les asp.net die ik krijg op Inholland Alkmaar gaat niet zo heel diep op cookies in maar de leraar kon mij wel vertellen dat oud leerlingen hun "tijdelijke" winkelmand in een cookie zetten.

Ik kan de tijdelijke winkelmand wel opslaan in de database maar dan krijg ik ontelbaar veel bestellingen die niet echt besteld gaan worden.

Zodoende kwam ik uit op een cookie alleen nu weet ik dus niet goed hoe ik het aan moet pakken.

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

..

[ Voor 111% gewijzigd door ? ? op 25-01-2013 09:35 ]


Acties:
  • 0 Henk 'm!

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 03-09 19:11
Session is dan inderdaad beter. Maar dan nog zou ik persoonlijk alleen gebruik maken van de Session ID en die koppelen aan een winkelmand die je op de server hebt...
Voor de rest moet dit toch echt piece of cake zijn.

Acties:
  • 0 Henk 'm!

  • Zer0cool12342
  • Registratie: April 2005
  • Laatst online: 05-08 22:31
Fastman schreef op dinsdag 24 november 2009 @ 00:15:
[...]

Hiervoor hebben we SESSION ;)
Ik begrijp niet waarom je cookies wil, tenzij je de inhoud van een winkelkar wil houden nadat de gebruiker zijn browser gesloten heeft. Als je dat wil, onthoud het aantal en het productid. Maar geen prijzen. Cookies worden door de client bewaard, en zijn dus aan te passen, met alle gevolgen van dien. De zaken in een SESSION object staan op de server. Op de server kun je ook instellen hoe lang die sessie moet meegaan. Zo ruimt IIS na 20 minuten alle inactieve sessies op, met de niet bestelde zaken dus.
Nee, nu je het zegt dan verkopen we straks enorm veel maar is de prijs 0.00 morgen maar even wat opzoeken over sessions.

Acties:
  • 0 Henk 'm!

  • jp
  • Registratie: November 2000
  • Laatst online: 03-07 15:30

jp

Hoe lang moet de Winkelmand meegaan?
Als dat kort is: sessie
Als dat lang is: cookie :)

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
jp schreef op dinsdag 24 november 2009 @ 09:28:
Hoe lang moet de Winkelmand meegaan?
Als dat kort is: sessie
Als dat lang is: cookie :)
Dat is wel erg kort door de bocht. Hoewel de lokatie wel invloed heeft op de duur dat de data beschikbaar is, kun je beter aan de hand van de scope waarin de winkelmand hoort te leven bepalen waar je hem opslaat. Daarbij moet je natuurlijk ook rekening houden met wat security zaken, aangezien je een cookie kunt wijzigen, data die in een Session staat niet ( Moet je er natuurlijk nog wel voor zorgen dat een session niet gehijacked kan worden ;) )

Een browser sessie: Cookie/Sessie
Een browser: Cookie/Persistent Session ( d.m.v. Cookie )
Een user: Database/Persistent Session ( d.m.v. User/Login )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Zer0cool12342
  • Registratie: April 2005
  • Laatst online: 05-08 22:31
jp schreef op dinsdag 24 november 2009 @ 09:28:
Hoe lang moet de Winkelmand meegaan?
Als dat kort is: sessie
Als dat lang is: cookie :)
De winkelmand moet kort meegaan het is echt tijdelijk ik denk dat een half uurtje tot een uurtje meer dan voldoende is.

Acties:
  • 0 Henk 'm!

  • Zeebonk
  • Registratie: Augustus 2005
  • Laatst online: 30-07 20:50
Zer0cool12342 schreef op dinsdag 24 november 2009 @ 00:07:
[...]


Het is geen eis maar dit is de enigste manier die ik kon bedenken, de les asp.net die ik krijg op Inholland Alkmaar gaat niet zo heel diep op cookies in maar de leraar kon mij wel vertellen dat oud leerlingen hun "tijdelijke" winkelmand in een cookie zetten.

Ik kan de tijdelijke winkelmand wel opslaan in de database maar dan krijg ik ontelbaar veel bestellingen die niet echt besteld gaan worden.

Zodoende kwam ik uit op een cookie alleen nu weet ik dus niet goed hoe ik het aan moet pakken.
Ik ben een van die leerlingen. Zit er nu niet meer, overgestapt naar de universiteit.

Het voorbeeldje wat ik geef is zeker niet de mooiste oplossing. Gelukkig zijn ze (twee jaar geleden iig) niet steng wat betreft mooie/juiste code:


ASP.NET C#:
1
2
3
Session['12'] = 5;
Session['32'] = 2;
Session['2'] = 1;


Zo, een winkelwagen. Waarbij de '12' '32' '2' product id's zijn en de waardes het aantal. :+

Ik denk dat je beter naar de andere geopperde ideeën kan kijken. Als je het dan wilt leren, doe het dan meteen maar goed :)
Pagina: 1