Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 那么用户已经登录,我如何实现重定向到主页?(ASP MVC 3)_C#_Asp.net Mvc 3 - Fatal编程技术网

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
    和应用程序路径
    \
    。这两个网站都匹配
  • 您将自己视为已登录的用户和其他用户
你能做些什么来解决这个问题?

注销这两个网站。不要登录虚拟网站。登录到实际网站。玩得开心

更持久的修复方法?

视情况而定。出现问题的原因是cookie的作用域过于松散。如果需要在
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