ASP.NET:指导用户登录页面,登录后发送用户回到原来请求的页面?

时间:2009-10-14 22:47:10

标签: asp.net authentication redirect login

我正在尝试在ASP.NET 3.5中手动实现登录系统。基本上,在加载时,我希望网站检查并查看用户对象是否处于活动状态,如果没有,则我希望登录页面显示。

用户成功登录后,我希望用户能够访问他最初请求的同一页面。

例如:

  1. 用户请求:MyPage.aspx - 未登录
  2. 显示登录页面而不是MyPage.aspx
  3. 用户成功登录
  4. MyPage.aspx而不是Default.aspx,例如
  5. 在System.Net命名空间对等,我看到有一个“HttpWebRequest类”,它有一个“HttpWebRequest.AllowAutoRedirect属性”,但我不确定这会如何让我从登录页面回来。

    注意:我知道ASP.NET中有自动身份验证系统设置,但我希望手动控制数据库。

    - Tomek

3 个答案:

答案 0 :(得分:2)

如果您不想实际使用内置的表单,则可以执行以下操作:

检查用户是否在要隐藏匿名用户的每个页面上进行了身份验证。如果未经过身份验证,请使用查询字符串中的URL将其重定向到您的登录页面。

if(!HttpContext.Current.User.Identity.IsAuthenticated) {
    Response.Redirect(~/login.aspx?redirect=this_page.aspx");
}

然后在您的登录页面上,在用户登录后。检查查询字符串以查看是否存在重定向参数。

if(!String.IsNullorEmpty(Request.QueryString["redirect"]) {
  string url = ResolveClientURL(redirect);
  Response.Redirect(url);
}

当然这都是使用身份验证构建到.NET中,您可以拒绝匿名访问某些目录,当您这样做时,.NET将重定向到您的登录页面(在web.config中设置)和将在您的登录页面上包含“ReturnURL = blahblah”。

只是一个FYI。

答案 1 :(得分:1)

只需在Session中保存最初请求的网址或在登录页面上保存隐藏字段 成功登录后,使用Server.Transfer或Response.Redirect跳转到该页面。

答案 2 :(得分:0)

看起来像here描述了另一种方法。您似乎可以使用以下对象从登录页面返回:

FormsAuthentication.RedirectFromLoginPage

然而,根据这篇文章,更好的方法是使用JackM所描述的,但是过载:

Response.Redirect("~/default.aspx", false);

这样做可以防止在重定向页面时结束会话。