닷넷에서 Session id를 이용해서 방문자수 나타내기

더 찾아보던 중
sessionState
cookieless=“true”
regenerateExpiredSessionId=“true”
timeout=“30”

이라는 코드를 발견했고, 이것을 넣으니 일단 url에
http://localhost:8094/(S(e2i1e2kgzpzv15dgb11r0o5v))/SessionDemo/GetSession
이렇게 뜬 채로 세션 아이디가 추가되지 않도록 되었습니다.

============================================

안녕하세요.
닷넷 프레임워크에서 Session을 이용해서 방문자수 나타내기를 구현하고 있는데요.

세션은 클라이언트(브라우저)마다 SESSION ID를 이용해서 식별한다고 알고 있습니다.

그래서 각 브라우저마다 하나의 session id를 가지고 있으니, session id를 프로시저로 넘겨서
이것을 db의 테이블에 있으면 저장하지 않고, 없다면 저장하는 방식으로 만들어보았는데요.

그런데 chrome에서 접근 시에는 새로고침 페이지마다 session id가 바뀌지 않았는데,
다른 브라우저에서는 새로고침할 때마다 session id가 다르게 나오더라고요.

찾기로는 세션 아이디를 활용하려면 HttpSession를 써야 한다는 것 같기도 한데 이건 java에 해당하는 것 같아서요.
제가 잘못 알고 있는 부분이나 잘못 작성한 코드를 말씀해주시면 감사하겠습니다.

컨트롤러 코드는 아래와 같이 짜고 IIS에 올렸습니다.

// 세션 보여주기
    public ActionResult GetSession() {


        //var b = HttpContext.Current.Session.SessionID;

        var SID = Session.SessionID;

        try 
        {
            var conStr = ConfigurationManager.ConnectionStrings["SESSION"].ConnectionString;
            using (var con = new SqlConnection(conStr)) 
            {
                DataTable dt = new DataTable();

                var cmd = con.CreateCommand();

                con.Open();

                cmd.CommandText = "dbo.USP_SAVE_SESSIONID";
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@sessionid", SID));
                // 넘겨온 오류 값
                SqlParameter parameterReturnValue = new SqlParameter("ReturnValue", SqlDbType.Int, 4);
                parameterReturnValue.Direction = ParameterDirection.ReturnValue;
                cmd.Parameters.Add(parameterReturnValue);

                var reader = cmd.ExecuteReader();
                dt.Load(reader);

                int resultNum = (int)cmd.Parameters["ReturnValue"].Value;

                reader.Close();

                // 카운트 숫자 View에 반환
                ViewBag.Count = resultNum;

                con.Close();

            }
        
        } 
        catch (Exception e)
        {
            ViewBag.Count = "오류";
            return View();
        }


        


        return View();
    }

그리고 프로시저(mssql)입니다

declare @cnt int = 0;

select 
@cnt = count([SessionID])  
from 
SessoinID 
where 
SessionID = @sessionid

--없다면 추가
if(@cnt = 0)
Begin
Insert into SessoinID(
 SessionID)

values(
@sessionid
)
End

select 
@cnt = count([SessionID])  
from 
SessoinID 

return (@cnt)

이 글을 참고해 보시겠어요?

그리고 결국엔 Session은 내부적으로 쿠키를 이용해서, 쿠키를 통해서 원하는 목적을 달성할 수도 있습니다.

좋아요 1

링크 감사합니다.
그런데 제가 미리 말씀을 못드렸는데 닷넷 프레임워크를 사용 중입니다.
이번에는 세션으로 구현을 해보고 싶어 도전하고 있는데, 사용 누겟패키지가 Microsoft.AspNetCore.Session가 아닌 닷넷용 혹시 있는지 여쭤봐도 될까요?

글쎄요… 별도로 패키지 설치 없이 그냥 되었던 것으로 기억하는데요, 잘 아시는 분이 답변 달아주시면 좋겠습니다.

좋아요 1

asp .net 질문으로 카테고리를 변경했습니다. :relaxed:

좋아요 1