더 찾아보던 중
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)