2

好吧,我终于不得不在这里创建一个帐户。多年来一直在使用它,并且经常在这里找到我的答案,但这次不是。好吧,我实际上发现了很多有类似问题的人,但他们的解决方案都没有帮助我。

我已经开始了一个新的 MVC3 项目,所以到目前为止它非常简单。我以前做过一些,所以我有点知道我在做什么(但不完全清楚,很明显,为什么还要在这里;-)

我的问题显然是一个相当普遍的问题:一个请求启动一个新的会话,即使用户已经有一个。

最令人沮丧的部分是,它在我的托管服务上完美运行,但在本地主机上被破坏了。

我做了很多事情来解决这个问题:

  • 我的计算机名称中没有下划线。
  • Session 包含自定义数据(该错误仅在用户登录后发生)。
  • 我在 web.config 中添加了以下内容(hmpf,猜你必须假设 gt / lt 字符):
    http协议
      自定义标题
        清除 /
        添加名称=“访问控制允许来源”值=“*”/
      /customHeaders
    /http协议
  • 这也是:

    模块 runAllManagedModulesForAllRequests="false"/
  • 使用 InProc sessionstate,我尝试过使用“cookieless”的真假。

  • 我的主机文件不包含任何关于 localhost 的内容。

嗯。看看这个列表,我确定我遗漏了一些。有些也是故意的,因为他们是绝望的(是的,甚至比上面的还要多),并且出生于绝望。

如前所述,这特别令人不安,因为它适用于我的主机 - 我需要在开发服务器(VS2010)上调整一些配置设置吗?

我一直在假设问题是由于跨域安全引起的(它认为我来自另一个域)。

失败发生在这个请求上:

url: 'http://localhost:50396/moody/changeBuilding/' + elem.selectedIndex,  

它是我与 jQuery.ajax 函数一起使用的选项数组的一部分。

我在上传到主机时更改了域,但只有 localhost:port 部分,应用程序中的其他所有内容都是相同的。

我已经为此撞了 2 天了,并且会错过我的考试 :-( 不过,我决心把这 6 英尺深埋在地下。

我将非常感谢任何和所有的建议!

4

2 回答 2

0

您是否尝试过使用提琴手之类的东西来确保会话 cookie 是在 AJAX 请求中发送的。如果域相同但它正在检查工作,则应该发送它。

编辑:这篇关于更改端口的SO 帖子也值得一读。

编辑:鉴于 Charlino 评论中的新信息(以及其中进行的出色侦探工作),如果问题仅在您的本地开发机器上,那么解决 localhost/127.0.0.1 问题的最简单方法是手动更改浏览器 url从 127.0.0.1:50396 到 localhost:50396,再次登录以获取新的 cookie,然后你就可以开始了。

于 2012-12-12T21:41:01.173 回答
0

我在上传到主机时更改了域,但只有 localhost:port 部分,应用程序中的其他所有内容都是相同的。

阅读以上内容,我认为会话 cookie 没有被发送,因为您正在更改域。

让我们坐下来想想会话是如何工作的。基本上 ASP.NET 包含会话及其数据的集合。当每个请求进来时,ASP.NET 必须将该请求映射到现有会话或为它们创建一个新会话。

那么 ASP.NET 是如何知道每个传入请求属于哪个会话的呢?或者知道它需要创建一个新请求?知道这一点的唯一方法是请求是否包含一些信息,一个“密钥”,它告诉 ASP.NET 给该请求哪个会话......或者在没有这个“密钥”的情况下,创建一个新会话。

请求如何发送这个“密钥”?通过cookies。

因此,如果您更改域,cookie 将不会被发送......因此,ASP.NET 将为请求创建一个新会话。

于 2012-12-12T21:43:18.313 回答