0

我有一个用 ASP.Net MVC4 编写并部署到 IIS7.5 的网站,用户首先需要登录才能浏览其他网页,例如,这里的源代码如下所示:

路线:

localhost/project/account/logon
localhost/project/apple
localhost/project/banana

登录方法:

[RequireHttps]
public ActionResult Logon(string returnUrl)
{
    ...
    return View();
}


[HttpPost]
public ActionResult Logon(string user, string pwd, bool remember)
{
    ...
    string url = "/apple";
    return Redirect(url);
}

问题是,用户登录后,我们将用户重定向到其他链接使用return Redirect('/apple'),它也使用 HTTPShttps://localhost/project/apple访问新链接。

如何防止重定向使用 HTTPS?

4

2 回答 2

1

您可以使用以下内容:

[HttpPost]
public ActionResult Logon(string user, string pwd, bool remember)
{
    var url = Url.Action("someAction", "someController", null, "http");
    return Redirect(url);
}

但不要那样做。切勿通过未加密的通道传输会话 cookie。一旦用户通过身份验证并且您向他发送了身份验证 cookie,则该用户在您的网站上所做的一切都应通过 SSL 发送。我还建议您使用secure标志(requireSSL="true"在您的 web.config 中)发出表单身份验证 cookie。

于 2013-08-05T07:37:13.207 回答
0

您还可以查看IIS Url rewrite以执行从 https 地址到 http 地址的 url 重定向。例如,此规则将所有 https 流量重定向到相应的 http 端点

<rewrite>
      <rules>
        <rule name="HTTPS to HTTP" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{SERVER_PORT}" pattern="^443$" />
          </conditions>
          <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" redirectType="Temporary" />
        </rule>
      </rules>
    </rewrite>
于 2013-08-05T08:17:21.373 回答