사용자의 새로고침(F5) 캡쳐하기
게시판의 조회화면에서 새로고침을 할 경우 조회수가 증가하는 경우가 있다.
동일한 사용자가 같은 글을 조회할 경우 조회수 증가가 없도록 해할 할 때 사용,
쇼핑몰에서 구매과정중 새로고침 현상으로 인해 발생할 수 있는 이중과금문제를 필할때,
다음과 같이 한 번 해보자.
public class Refresh : System.Web.UI.WebControls.WebControl
{
bool _isrefresh = false;
string _tname = "__Ticket";
public Refresh()
{
if (HttpContext.Current == null) return;
// Get Session and Request objects
HttpSessionState S = HttpContext.Current.Session;
HttpRequest R = HttpContext.Current.Request;
// Change null to 0 (prevents errors)
if (S[_tname + "_LastServed"] == null) { S[_tname + "_LastServed"] = 0; }
// Get current and last ticket served
int ticket = Convert.ToInt32(R["__" + _tname]) + 1;
int lastticket = Convert.ToInt32(S[_tname + "_LastServed"]);
// Refresh detection
if (ticket > lastticket || (ticket == 0 && lastticket == 0))
{
S[_tname + "_LastServed"] = ticket;
}
else
{
_isrefresh = true;
}
}
protected override void Render(HtmlTextWriter output)
{
HttpSessionState S = HttpContext.Current.Session;
Page.RegisterHiddenField("__" + _tname, S[_tname + "_LastServed"].ToString());
}
public bool IsRefresh
{
get { return _isrefresh; }
}
public string version
{
get { return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
}
}
<CC1:REFRESH id="Refresh1" runat="server"></CC1:REFRESH>