Как дать идентификатор анонимному пользователю, чтобы запомнить его данные в базе данных?
Я хочу дать идентификатор пользователю, который открывает мой веб-сайт и добавляет некоторые элементы в свою "корзину", даже если они не зарегистрированы в службе. Просто добавьте, а затем перейдите к регистрации, когда они хотят проверить. И если они не перейдут к оформлению заказа после добавления материала, затем закройте браузер, вернитесь через 2 дня, я хочу получить их предыдущие заказы из базы данных.
Как я могу дать этот идентификатор, уникальный для пользователя, и запомнить его при следующем посещении?
Я предполагаю, что мне нужно использовать куки, но не знаете как именно?
2 ответа
Я сделал нечто подобное, используя куки и базу данных. Таким образом, в C# у вас может быть таблица Basket, и в этой таблице есть столбец UserId и столбец ProductId. Затем из вашего контроллера вы извлекаете корзину пользователей, в которой указан идентификатор пользователя в базе данных.
Установка куки:
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);
Затем, чтобы получить куки в контроллере:
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);
}
Примечание. Я использовал здесь Request.Cookies.Get("userId"), потому что если вы используете Response.Cookies.Get("userId"), а cookie "UserId" не существует, то он создаст для вас cookie.
Когда пользователь добавляет что-то в корзину, запустите javascript следующим образом:
var storedId = localStorage.getItem('myId');
if(storedId == null)
{
storedId = parseInt(Math.Random * 1000); // or better, use UUID generation from here: https://stackru.com/questions/105034/create-guid-uuid-in-javascript
localStorage.setItem('myId', storedId); // for future reference
}
Теперь, когда вы добавляете что-то в корзину, публикуйте идентификатор, например
контроллер:
[HttpPost]
public ActionResult AddToCard(string userId, string productId, int quantity)
{
/// perform your saving to db
}
Ajax (или любой другой фреймворк, который вы используете):
$.post('/somewhere', {userId: storedId, productId: 'whatever', quantity: 1});