웹 세션은 "나쁜 디자인"입니까? 왜?


13

다른 날 나는 동료와 이야기를 나누었고 웹 응용 프로그램에서 사용자 세션을 사용하는 것이 잘못되었다고 말했습니다. 저장하는 정보에 따라 잘못 될 수 있다고 대답했습니다. 그렇지 않으면 Microsoft에서 웹 세션 서비스를 제공 해야하는 이유는 무엇입니까 (우리는 ASP.NET에 대해 이야기했습니다).

그는 다시 MS에게조차도 나쁜 디자인이라고 나에게 쉽게 대답 할 수 있다고 대답했다. 그리고 그는 그것을 보여주는 몇 가지 백서를 보여줄 수있었습니다.

불행히도 나는 더 이상이 사람에게 연락 할 기회가 없지만, 그의 관점에 대해 더 많이 알고 싶습니다. 누구든지 여기에 대한 정보 / 견해가 있습니까?


2
HTTP 프로토콜은 원래 "상태 비 저장 (stateless)"으로 설계되었으므로 모든 트랜잭션은 개별적이고 제공된 정보를 기반으로합니다. 세션은 일부 용도에서이를 해결하는 방법입니다. 그러나 실제로 많은 현대 웹 사이트의 경우 세션을 피하는 간단한 방법을 생각할 수 없습니다. 창의력이 부족할 수도 있습니다.
Katana314

@ Katana314 쿠키를 사용한 데이터베이스 저장소. 세션은 사용자 식별과 같은 매우 기본적인 정보를 위해 세션을 사용할 수 있지만 많은 세션 구현 (특히 Django에서 여러 번 공격 한 경우)에는 동일한 사용자가 여러 요청을 할 때마다 더 많은 임시 데이터로 경쟁 조건을 만들 수있는 결함이 있습니다. 한 번에 전송됩니다 (AJAX 통화와 동일)
Izkata 2016 년

2
쿠키가있는 데이터베이스 저장소는 데이터베이스에 세션을 저장하기 만하면됩니다.
Alan Shutko

답변:


11

나는 그가 "나쁜 연습"만큼 "나쁜 디자인"을 의미한다고 생각하지 않습니다. 일반적으로 웹 응용 프로그램은 가능한 한 상태가없는 상태 여야합니다. 예를 들어, 페이지보기를 승인하기 위해 사용자 정보를 알아야 할 수도 있지만, 해당 정보는 쿠키 형식으로 클라이언트 시스템에 저장 될 수 있으며 서버는 매번 사용자 정보를 검증합니다.

이상적이지만 쿠키를 저장할 수있는 클라이언트를 항상 신뢰할 수있는 것은 아닙니다. 또한 상태 비 저장 방식으로 사용자를 검증하는 작업이 포함되며, 간단한 페이지 요청을 위해 데이터베이스에서 정보를 쿼리 할 수 ​​있습니다. 종종 그러한 정보를 세션에 저장하는 것이 더 간단합니다.

그러나 Rubicon을 넘어 서면 많은 프로그래머들이 세션에 인증 정보뿐만 아니라 다른 많은 정보도 저장하고 싶어합니다. 이것은 안티 패턴이며 웹 응용 프로그램을 상태에 크게 의존하게 만드는 경향이 있으며, 이는 처음에 피해야 할 것입니다.

일부 프로그래머는 Spring과 같은 기술 (Java를 사용하는 경우)을 사용하여 종속성의 혼란을 해결할 수는 있지만 의존성을 제거하는 대신 종속성을 만드는 것이 더 쉬울 것이라고 주장합니다. 이러한 기술은 개발에 도움이되며 안티 패턴을 문제로 만드는 것이 아닙니다.

따라서 일반적으로 상태 비 저장 (stateless)으로 작성할 수 있다면 그렇게하는 것이 더 좋을 수도 있고이 함정에 빠질 위험이 있다는 것입니다. 분명히 이것이 필요한 상황에 처하게 될 것이지만 일반적으로 말하면 다시 수집하기 어려운 정보 만 저장해야합니다.


1
but you can't always count on the client being able to save cookies그런 다음 AFAIK를 사용하면 세션을 신뢰할 수 없습니다. 쿠키가 어떤 세션이 어느 사용자에게 속하는지 식별하는 데 사용되지 않습니까, 아니면 다른 방법이 있습니까?
이즈 카타

세션 정보는 일반적으로 각 서버 / 클라이언트 연결마다 서버에 저장되며 이는 쿠키를 활성화 한 사용자에게 의존 할 수없는 대규모 웹 사이트에서 인기있는 추세가되었습니다. 클라이언트 PC에 상기 정보를 강제로 저장하는 옵션 (및 / 또는 js 라이브러리)이 있지만 (최근에 매우 인기가 높아지고 있음) HTML 5가 없으면 쿠키가이를 달성 할 수있는 유일한 방법입니다. 내 지식으로는, 이것을하는 다른 방법은 없습니다.

8

나는 당신이 두 가지 다른 주제를 혼동하고 있다고 생각합니다 : 1) 세션과 2) asp.net webforms의 페이지 모델

사용자 인증 에는 웹 세션이 필요합니다 . 이상적으로 세션은이 목적으로 만 사용해야합니다. 당신은 저장하지 않아야 사용자 데이터를 (가 서버에 있던지 쿠키에, 또는 asp.net/webforms로 수행합니다 페이지 자체 내에서) 세션에서. 웹 세션이 나쁘다고 말하지 말고 사용자 데이터를 저장하십시오.세션에서 나쁜 습관입니다. 서버에 사용자 데이터를 저장하지 않는 이유는 전역 변수를 피하는 것과 같은 이유입니다. 쿠키 나 페이지에 사용자 데이터를 저장하면 보안 문제가 발생할 수 있습니다. asp.net의 페이지 모델을 사용하더라도 웹의 상태 비 저장 특성을 준수하지 않습니다. 왜 webforms가 나쁜 디자인인지에 대한 자세한 정보를 찾기 위해 검색을 수행 할 수 있습니다. 반면에 세션은 웹 응용 프로그램의 필수 부분입니다.


"반면 세션은 웹 애플리케이션의 필수 부분입니다." No.
masterxilo

6

페이지에서 제어 및 세션 상태 저장은 본질적으로 해킹입니다. Winform 환경에서 할 수있는 것처럼 페이지를 디자인 할 수있는 개발 환경을 제공 할 수 있기를 원했던 MS의 경우입니다.

MS는 스스로 MVC 아키텍처 (최신 버전-MVC 4)로 전환했다. 이는 프로토콜이 실제로 무 상태 여야하는 것에 대한 복귀이다.

저장 상태가 여전히 편리한 상황이 있지만 이것이 규칙이 아니라 예외라는 것을 이해해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.