C# 那么用户已经登录,我如何实现重定向到主页?(ASP MVC 3)
对于如何实现此功能,我感到非常困惑。 最初,当用户访问网站时,他们会看到登录页面C# 那么用户已经登录,我如何实现重定向到主页?(ASP MVC 3),c#,asp.net-mvc-3,C#,Asp.net Mvc 3,对于如何实现此功能,我感到非常困惑。 最初,当用户访问网站时,他们会看到登录页面 [HttpGet] public ActionResult SignIn() { return View() ; } 当用户输入详细信息时,会调用: [HttpPost] public ActionResult Sign(SignInModel signInModel) { if(service.ValidateUser(signInModel.userName,signInModel.passWord
[HttpGet]
public ActionResult SignIn()
{
return View() ;
}
当用户输入详细信息时,会调用:
[HttpPost]
public ActionResult Sign(SignInModel signInModel)
{
if(service.ValidateUser(signInModel.userName,signInModel.passWord))
{
FormsAuthentication.SetAuthCookie(signInModel.userName, true);return
return RedirectToAction("Index", "Home");
}
}
但是,作为一项测试,我决定返回登录页面,因此,localhost/Account/SignIn,但它不会将我重定向回主页。。因此,我尝试了一些来自so的类似问题的建议答案:
[HttpGet]
public ActionResult SignIn()
{
if(HttpContext.User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
return View() ;
}
但我不明白它是如何工作的,所以我决定调试它。但事实证明它使用了错误的标识
为了解释,我使用了一个默认的MVC模板来让我的项目工作,我和James一起登录了该模板。然而,对于我自己的项目,我与Peter一起登录
但是在我自己的项目中,HttpContext.User.Identity
指的是默认网站的James,而不是Peter。。很明显这里有问题,但是什么
TL;DR如何持久化StackOverflow之类的信息?只有当会话到期或用户注销时,用户才能看到登录页面。我想你要找的答案在那里: 编辑: 在这种情况下,请尝试以下操作:生成登录链接时,您可能希望传递
returnUrl
参数:
@Html.ActionLink("Log On", "LogOn", "Account", new { returnUrl = Request.Url }, null)
在您的特定情况下,您可以将returnUrl
传递到主页。
抱歉搞混了
希望这有助于纠正我,如果我还没有正确理解它
- 您正在本地主机上托管这两个网站。很可能是不同的端口号李>
- 您首先登录到虚拟网站(模板网站)。你得到了一个认证饼干李>
- 你没有注销虚拟网站。因此,您的身份验证cookie仍然有效李>
- 然后,您启动了实际的网站(您的项目)。当您请求登录页面时,您先前收到的cookie也会发送到服务器。发生这种情况的原因是cookie的作用域
和应用程序路径localhost
。这两个网站都匹配李>\
- 您将自己视为已登录的用户和其他用户李>
localhost
上运行这两个网站,那么您可以将IDE配置为在文件夹下启动它们。意思是虚拟网站在http://localhost:1234/dummy/
和actual在http://localhost:4321/actual
。对于普通cookie,您可以直接设置路径。对于auth cookie,可以使用FormsAuthentication.GetAuthCookie
方法
src:
编辑:
似乎普遍的共识是不要设定道路
Cookie路径区分大小写,因此:
http://site/path
http://site/PATH
浏览器有两个不同的cookie-没有一个(即,FX,
Safari、Opera或Chrome)将向/PATH或vice发送/PATH的cookie
反之亦然
不,我要做的是在用户登录后重定向到主页。基本上使用cookie或会话来检查用户是否经过身份验证。以Facebook为例,如果你登录,你不必再次登录,直到你注销。哈哈,是的,到底发生了什么。。但难道没有一个合适的解决办法吗?
http://site/path
http://site/PATH