2017-12-11 29 views
2

Ich möchte einem Benutzer eine ID geben, der meine Website öffnet und einige Elemente zu ihrem "Einkaufswagen" hinzufügt, auch wenn sie nicht für den Dienst angemeldet sind. Einfach hinzufügen, dann weiterzumelden, wenn sie auschecken möchten. Und wenn sie nach dem Hinzufügen von Sachen nicht zur Kasse gehen, dann schließen sie ihren Browser, kommen 2 Tage später zurück, möchte ich ihre vorherigen Bestellungen aus der Datenbank abrufen.Wie kann man einem anonymen Benutzer eine ID geben, um sich an seine Daten in der Datenbank zu erinnern?

Wie gebe ich diese ID, die eindeutig für einen Benutzer ist und sich beim nächsten Besuch daran erinnert?

Ich nehme an, dass ich Cookies verwenden muss, aber nicht genau weiß, wie?

+1

können Sie Cookies oder html5 localstorage verwenden – Niladri

+0

Wie gesagt, ich nehme an, dass ich Cookies verwenden muss, aber wie benutze ich sie und wie benutze ich sie mit asp.net? –

+0

verwenden Sie Webforms? – Niladri

Antwort

0

Ich habe etwas ähnliches mit Hilfe von Cookies und eine Datenbank erfolgen. In C# könnten Sie also eine Basket-Tabelle haben und in dieser Tabelle eine UserId-Spalte zusammen mit einer ProductId-Spalte haben. Dann würden Sie von Ihrem Controller den Benutzerkorb ziehen, wo die UserId in der Datenbank ist.

Einstellen des Cookie:

string cookieValue = Guid.NewGuid().ToString(); 
//Creating a cookie which has the name "UserId" 
HttpCookie userIdCookie = new HttpCookie("userId"); 
userIdCookie.Value = cookieValue; 
//This is where you would state how long you would want the cookie on the client. In your instance 2 days later. 
userIdCookie.Expires = DateTime.Now.AddDays(3); 
Response.SetCookie(userIdCookie); 

Dann das Cookie in der Steuerung zu erhalten:

public ActionResult Basket() 
{ 
    //Getting the cookie which has the name "userId" and assigning that to a variable. 
    string userId = Request.Cookies.Get("userId").Value; 
    var basket = _context.Basket.Where(x => x.UserId == userId);  
    return View(basket); 
} 

Hinweis: Ich habe Request.Cookies.Get verwendet ("userId") hier, weil Wenn Sie Response.Cookies.Get ("userId") verwenden und der Cookie "UserId" nicht existiert, erstellt er den Cookie für Sie.

+0

Ich habe bereits eine "Bestellungen" -Tabelle, die mit einer "Kunden" -Tabelle verbunden ist, ich möchte nur einen temporären Kunden erstellen und diese temporären Kundendaten auf einem Cookie für diesen Kunden speichern, das ist alles. –

+0

Versuchen Sie dies jetzt, herausgefunden, wie es geht. –

+0

Es funktionierte perfekt nach ein paar kleinen Optimierungen, ich fügte eine kleine Bedingung hinzu, um zuerst Cookie zu bekommen, und wenn nicht, dann bekam ich nur einen Cookie zugewiesen (sonst wurde jedes Mal ein neuer Benutzer erstellt, wenn Homepage geöffnet wurde). Vielen Dank! –

0

Wenn der Benutzer etwas den Warenkorb addiert, führen Sie Javascript in etwa so:

var storedId = localStorage.getItem('myId'); 

if(storedId == null) 
{ 
    storedId = parseInt(Math.Random * 1000); // or better, use UUID generation from here: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript 

    localStorage.setItem('myId', storedId); // for future reference 
} 

Nun, wenn Sie etwas in der Warenkorb legen, schreibt die ID, z.B.

Controller:

[HttpPost] 
public ActionResult AddToCard(string userId, string productId, int quantity) 
{ 
    /// perform your saving to db 
} 

Ajax (oder was auch immer Rahmen Sie verwenden):

$.post('/somewhere', {userId: storedId, productId: 'whatever', quantity: 1}); 
Verwandte Themen