MVC 응용 프로그램 템플릿에서 생성 된 기본 MVC 응용 프로그램이 있습니다. 나는 일반적인 Index, Details, Edit 및 Create 메소드를 포함하는 기본 컨트롤러를 만들었습니다. 저는 Person이라는 객체를 두 개 가지고 있습니다 :MVC 프로토 타입의 여러 브라우저 세션에서 메모리 데이터가 지속되는 이유는 무엇입니까?
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Description { get; set; }
}
그리고 다른 하나는 가짜 DAL을 조롱하는 것입니다. 그것은이 프로토 타입의 목적을 위해 그냥 빨리 모형의, 파일에 데이터 나 데이터베이스를 유지하지 않습니다
public class PersonData
{
/* Fake out our initial repository */
static List<Person> People = new List<Person>()
{
new Person() { Id=1, FirstName="John", LastName="Doe", Description="King of the world" },
new Person() { Id=2, FirstName="Jane", LastName="Doe", Description="Chief whip cracker" }
};
/* Set up the indexing system */
private static int GetNextId()
{
return People.OrderByDescending(i => i.Id).First().Id + 1;
}
public static IEnumerable<Person> GetPeople()
{
return People;
}
public static Person GetPerson(int id)
{
if (id > People.OrderByDescending(i => i.Id).First().Id)
throw new ArgumentOutOfRangeException();
return People.Where(i => i.Id.Equals(id)).SingleOrDefault();
}
public static void Save(Person data)
{
/* Either remove the old one or assign a new ID */
if (data.Id != 0)
People.Remove(People.Where(i => i.Id.Equals(data.Id)).SingleOrDefault());
else
data.Id = GetNextId();
People.Add(data);
}
}
이 컨트롤러에 대해 특히 흥미로운 것은 여기에, 하나 없습니다 편집 기능의 발췌입니다 :
// GET: /Person/Edit/5
public ActionResult Edit(int id)
{
Person person = PersonData.GetPerson(id);
return View(person);
}
//
// POST: /Person/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Person person)
{
try
{
PersonData.Save(person);
return RedirectToAction("Details", person);
}
catch
{
return View(person);
}
}
모든 기능이 있지만 설명 할 수없는 몇 가지 이상한 예외가 있음을 알았습니다. 첫 번째로, 편집 양식에있는 사람을 변경하고 저장하면 모든 것이 세부 정보 페이지에 잘 반영됩니다. 그런 다음 다른 브라우저 인스턴스 (Opera/Chrome/Whatever)를 알리고 그 사람의 세부 정보 페이지를 입력합니다. PersonData가 메모리에만로드되고 지속되지 않기 때문에 두 번째 브라우저에서 데이터가 변경된 것을 볼 수 있기를 기대했지만 두 번째 브라우저에서 브라우저 1에서 변경된 사항을 확인합니다.
저는 Visual Studio의 개발 서버에서 실행 중이며 동일한 세션에 액세스하고 있다고 가정했기 때문에 제가이를 백분율로 표시했습니다. 가설을 증명하기 위해 동일한 세션 ID를 볼 것으로 예상되는 세부 정보 페이지에 세션 ID를 추가했지만 잘못되었습니다. 각 세션마다 다른 ID가 있습니다.
이 외에도 세션 ID는 두 브라우저에서 페이지가 새로 고침 될 때마다 바뀌며 항상 서로 다릅니다. 그들은 모두 다른 세션에있을 때
- 왜 내 DAL 모의의 데이터가 모두 브라우저에서 지속된다
나는이 이유를 이해하고 다른 사람이 설명 할 수 있는지 궁금하지?
- 세션 ID가 페이지 새로 고침을 통해 유지 관리되지 않는 이유는 무엇입니까? 사전에
감사
고맙습니다 - 그게 세션 리프레시에서 유지되지 않는 세션 ID는 무엇입니까? – BobTheBuilder
이것은 IIS에서 동일합니까? 아니면 Visual Studio Development Server에 고유 한 무언가입니까? – BobTheBuilder