身份验证不会持续用户会话

时间:2012-02-13 01:38:05

标签: security formsauthentication

我的网站不断强迫我回到请求之间的登录页面(身份验证问题)。

我的本​​地网站工作得很好,并且是完全相同的代码。没有身份验证问题......

我一直在网上搜索,整天在这个问题上撕掉我的头发,尝试不同的建议等等。

有人可以向我解释发生了什么以及如何纠正它吗?

[HttpPost] 
        public ActionResult LogOn(LogOnModel model, string returnUrl) 
        { 
            if (ModelState.IsValid) 
            { 
                if (Membership.ValidateUser(model.UserName, model.Password)) 
                { 
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

                    Session["Email"] = model.Email; 

                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
                    { 
                        return Redirect(returnUrl); 
                    } 
                    else 
                    { 
                        return RedirectToAction("Index", "Home"); 
                    } 
                } 
                else 
                { 
                    ModelState.AddModelError("", YeagerTechResources.Resources.AcctUserNamePswdInCorrect); 
                } 
            } 

            // If we got this far, something failed, redisplay form 
            return View(model); 
}

下面是我登录生产网站后立即提供的以下Cookie图片。请注意,未列出任何Cookie。

Cookie信息 - http://yeagertech.com/

现在,如果您查看为我的开发站点执行相同代码的相同信息,您会看到以下内容。这让我疯了,一整天都浪费了。我会帮助任何人一些帮助!

Cookie信息 - http://localhost:4514/

NAME

代理

VALUE

http://localhost:62613/proxy/0/

DOMAIN

本地主机

PATH

/

EXPIRES

2/12/2012 8:21:16 PM

请注意,在几次请求之后,它会返回到登录页面---仅在生产站点上,而不是在我的本地站点上。

生产网站上的cookie似乎没有足够长的保质期,然后才能回到登录页面。

我基本上希望cookie至少在用户会话中保持不变。

我该怎么做才能解决这个问题?

再次感谢....

我需要在IIS中配置与此网站相关联的设置,并收到以下错误:

“无法使用SQL Server,因为SQL Server上未安装ASP.NET 2.0版会话状态。请安装ASP.NET会话状态SQL Server 2.0或更高版本”

收到此错误后,我发现需要在SQL Server上启用会话状态,因此,我尝试运行InstallSqlState.SQL文件(位于我本地PC上的Microsoft.Net版本文件夹中)。

尝试运行脚本后,它失败(出现以下错误),因为我的托管数据库服务器上的SystemDatabases文件夹中没有“msdb”数据库。

“数据库'master'中的CREATE DATABASE权限被拒绝。如果该作业不存在,则会出现msdb.dbo.sp_delete_job中的错误。消息229,级别14,状态5,过程sp_delete_job,行1 EXECUTE权限为拒绝对象'sp_delete_job',数据库'msdb',架构'dbo'。消息911,级别16,状态1,行10数据库'ASPState'不存在。确保正确输入名称。“

所以,除非我的托管数据库上有一个msdb数据库(我只有master和tempdb),否则我无法在我的sql server上设置会话状态。

我想知道如何从这里开始。

顺便说一句,我发现即使启用它也不太可能解决问题。我的情况不符合您最初概述的3个要点中的任何一个。

这是一个小型数据库,几乎没有任何记录。我只是在我的网站上测试它以确保它在我开始添加记录之前工作正常。也没有时间流逝。

我好几页,然后突然回到登录页面......

如果我的本地机器工作正常,那么defintley必须处理我需要设置的东西,因为我正在运行你的服务器。

我会感激任何帮助......

1 个答案:

答案 0 :(得分:0)

我也面临这种类型的问题,但不是在MVC ....问题是FormsAuthentication Ticket在主机服务器上1分钟后到期.......

问题可能是您的工作人员不断回收会导致故障单过期或会话自动结束....您可以做的是与您的托管服务提供商联系并提高您的应用程序的专用内存限制或虚拟内存限制池 或者您可以询问他们用于加密和解密故障单的机器密钥元素可能会解决此问题

我也经常与我的托管服务提供商联系,但他们的产品开发团队花了太多时间来解决问题

相关问题