Я занимаюсь разработкой проекта MVC.Я пытаюсь добавить сигнал для уведомления в реальном времени.Тем не менее, обычно я использую сеанс для хранения идентификатора пользователя, вошедшего в систему, но безопасность не позволяет использовать сеанс.Я провел небольшое исследование и выяснил, что все используют проверку подлинности с помощью форм, и сопоставляет своего пользователя с «Context.User.Identity.Name»
public class ChatHub : Hub {
private static readonly ConcurrentDictionary<string, User> Users
= new ConcurrentDictionary<string, User>();
public override Task OnConnected() {
string userName = Context.User.Identity.Name;
string connectionId = Context.ConnectionId;
var user = Users.GetOrAdd(userName, _ => new User {
Name = userName,
ConnectionIds = new HashSet<string>()
});
lock (user.ConnectionIds) {
user.ConnectionIds.Add(connectionId);
// TODO: Broadcast the connected user
}
return base.OnConnected();
}
}
, и они заполняют этот «Context.User»..Identity.Name 'в контроллере с файлом cookie "FormsAuthentication.SetAuthCookie (loginModel.Name, true);"
[HttpPost]
[ActionName("Login")]
public ActionResult PostLogin(LoginModel loginModel) {
if (ModelState.IsValid) {
FormsAuthentication.SetAuthCookie(loginModel.Name, true);
return RedirectToAction("index", "home");
}
return View(loginModel);
}
Что я не понимаю, так это: Хранится ли в файле Context.User.Identity.NameСервер или клиентский компьютер?Если это хранится на компьютере клиента, разве это не проблема безопасности?потому что клиент может изменить имя и получить другие сообщения.
Какое решение?