2012-12-12 110 views
2

那么,我终于必须在这里创建一个帐户。多年来一直使用它,并经常在这里找到我的答案,但现在还没有。 嗯,我确实发现了很多有类似问题的人,但他们的解决方案都没有帮助我。ASP.NET MVC3在ajax请求上创建新会话

我已经开始了一个新的MVC3项目,所以目前很简单。我已经做了一些之前,所以我有点知道我在做什么(但不是很明显,为什么在这里;-)

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

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

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

  • 没有在我的电脑的名称没有下划线。
  • 会话包含自定义数据(错误只发生在用户登录后)。
  • 我已经加入了以下内容的web.config(哼,想你必须承担GT/LT字符):
 
    httpProtocol 
     customHeaders 
     clear/
     add name="Access-Control-Allow-Origin" value="*"/
     /customHeaders 
    /httpProtocol 
  • 这也太:

    modules runAllManagedModulesForAllRequests="false"/
  • 在InProc sessionstate中,我尝试了'无cookie'的真假。

  • 我的主机文件不包含任何关于本地主机的信息。

hm。看看这个清单,我确定我已经遗漏了一些。有些人故意也是如此,因为他们毫无希望(是的,甚至超过上述),并且是从绝望中诞生的。

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

我一直在工作的前提下,该问题是由于跨域安全(它认为我来自另一个域)。

故障发生在这个请求:

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

这是选项数组我与jQuery.ajax函数中使用的部分。

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

回答

0

您是否尝试过使用类似fiddler的内容来确保会话Cookie正在AJAX请求中发送。如果域名相同,但它正在检查,则应该发送。

编辑:这SO post改变端口值得一读。

编辑:鉴于Charlino的评论中的新信息(以及其中的英文检测工作),如果问题仅在您的本地开发机器上,那么解决localhost/127.0.0.1问题的最简单方法是手动将浏览器网址从127.0.0.1:50396更改为localhost:50396,再次登录以获取新的cookie,那么您就很好。

+0

是的,我一直在广泛使用小提琴手。我发送的请求如下所示:GET http://127.0.0.1:50396/moody/changeBuilding/1 HTTP/1.1 Host:127.0.0.1:50396 User-Agent:Mozilla/5.0(Windows NT 6.0; WOW64) AppleWebKit/534.57.2(KHTML,如Gecko)版本/ 5.1.7 Safari/534.57.2 接受:application/xml,text/xml,*/*; q = 0.01 原始地址:http:// localhost:50396 Referer:http:// localhost:50396/Moody/Home/9 Accept-Language:da-DK Accept-Encoding:gzip,deflate Connection:keep- alive Connection:keep-alive
当然,这意味着我的选项数组的url确实看起来像......下面是: – Tobias

+0

url:'http://ipv4.fiddler:50396/moody/changeBuilding/'+ elem.selectedIndex,对不起墙上的文字,但我真的不知道如何换行,或者为什么stackoverflow会让我们受这个可怕的评论系统的影响。 – Tobias

+0

_将浏览器URL从127.0.0.1:50396更改为localhost:50396_ ---我试过了,但无济于事。在'localhost:50396','127.0.0.1:50396'和'ivp4.fiddler'中键入产生相同的响应。 – Tobias

0

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

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

让我们坐下来思考会议的工作方式。基本上ASP.NET包含一组会话及其数据。当每个请求都进入时,ASP.NET必须将该请求映射到现有会话或为其创建新会话。

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

请求如何发送这个'key'?通过cookies。

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

+0

Cookie就在那里。我可以在safari的开发小组中看到它。但它确实写入了以前没有的错误:XMLHttpRequest无法加载http://ipv4.fiddler:50396/moody/changeBuilding/1。 Access-Control-Allow-Origin不允许源http:// localhost:50396。我认为这很奇怪,因为我应该允许每个人都有权访问(根据我的问题)。 – Tobias

+0

主机名和IP地址之间的Cookie不共享。例如。 'http:// localhost:50396'不会与'http://127.0.0.1:50396'共享cookie ......因此,它们不共享会话。 – Charlino

+0

好吧,那么我需要对我的主机文件做些什么?我曾尝试过一两件事,但无济于事。请你详细说明一下? – Tobias