昨天在逛社区的时候,看到一位园友发帖问到这个相关的问题。当时回答的不充分,也不细致,所以就抽时间写点东西进来,希望能起到一定的指导作用。
解决这个问题,首先,我们应该要选用Forms的认证,这个Forms认证不是这个话题的重点,在这里不进行详细介绍了,他们可以参考下面的相关文章:
由于昨晚时间的关系,没有贴出代码,实在抱歉啊,现在贴出部分的代码以示讲解,这里我准备了三个文件Login.aspx,Default.aspx,Web.config。下面先来看看如何在Web.config里面配置Form认证
<!--下面就是启用Forms认证的简单配置-->
<!--
name -- cookie的名字
defaultUrl -- 用户在登录成功以后跳转的页面。
loginUrl -- 指定登录的页面
timeout -- cookie验证的过期时间,以分钟为单位
-->
<authentication mode="Forms">
<forms name=".JqueryCookie" defaultUrl="http://jquery.kevin.cc" protection="All" timeout="43200"
<!--
name -- cookie的名字
defaultUrl -- 用户在登录成功以后跳转的页面。
loginUrl -- 指定登录的页面
timeout -- cookie验证的过期时间,以分钟为单位
-->
<authentication mode="Forms">
<forms name=".JqueryCookie" defaultUrl="http://jquery.kevin.cc" protection="All" timeout="43200"
loginUrl="login.aspx" domain="kevin.cc"/></authentication>
这样我们就配置好了认证信息了,接下来我们看看Default.aspx页面具体是如何验证用户是否登录了,以及将跳转的Url传给Login.aspx
protected void Page_Load(object sender, EventArgs e)
{
string ReturnUrl = Request.Url.AbsoluteUri;
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
//这是验证成功以后要做的过程。
}
else
{
Response.Redirect("http://jquery.kevin.cc/login.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl));
}
}
{
string ReturnUrl = Request.Url.AbsoluteUri;
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
//这是验证成功以后要做的过程。
}
else
{
Response.Redirect("http://jquery.kevin.cc/login.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl));
}
}
这个页面具体的做法,就是用先判断用户是否登录了,登录以后做验证成功以后的事情,如果没有登录,就跳转到登录页面,顺便将ReturnUrl加密一下传给Login.aspx,这样就可以在登录成功以后跳转到原来访问的页面了,紧接着我们看看Login.aspx是如何做的
protected void Page_Load(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
Response.Redirect("~/logined.aspx?ReturnUrl=" + Server.UrlEncode(lnkReturnUrl.NavigateUrl));
return;
}
if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
returnUrl = Server.UrlDecode(Request.QueryString["ReturnUrl"]);
}
else
{
returnUrl = "http://jquery.kevin.cc";
}
}
{
if (Request.IsAuthenticated)
{
Response.Redirect("~/logined.aspx?ReturnUrl=" + Server.UrlEncode(lnkReturnUrl.NavigateUrl));
return;
}
if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
returnUrl = Server.UrlDecode(Request.QueryString["ReturnUrl"]);
}
else
{
returnUrl = "http://jquery.kevin.cc";
}
}
在Page_Load事件先得到页面传过来的跳转页面的具体值,以便登录成功以后跳转页面,下面一段代码将要展示登录按钮事件的处理方式:
protected void btn_submit_Click(object sender, EventArgs e)
{
string username = txt_userName.Value.Trim();
string password = txt_Password.Value.Trim();
if (Login(username,password)) //Login是登录的方法,在这里不是重点,如何实现的忽略了
{
ltMessage.Text = "登录成功,正在加载页面";
//SetAuthCookie:为提供的用户名创建一个身份验证票证,并将该票证添加到响应的 Cookie 集合中或 URL 中
FormsAuthentication.SetAuthCookie(username, true);
Response.Redirect(returnUrl);
}
else
{
ltMessage.Text = "用户名或密码错误";
return;
}
}
{
string username = txt_userName.Value.Trim();
string password = txt_Password.Value.Trim();
if (Login(username,password)) //Login是登录的方法,在这里不是重点,如何实现的忽略了
{
ltMessage.Text = "登录成功,正在加载页面";
//SetAuthCookie:为提供的用户名创建一个身份验证票证,并将该票证添加到响应的 Cookie 集合中或 URL 中
FormsAuthentication.SetAuthCookie(username, true);
Response.Redirect(returnUrl);
}
else
{
ltMessage.Text = "用户名或密码错误";
return;
}
}
经过这样的操作,我们就能在需要验证登录的页面,在登录成功以后,就能定位到访问的页面了。一个简单的流程就是这样的,具体实现就看大家自己去动手实现了。