背景:我使用javascript与我的WCF服务进行通信。该服务的会话采用asp兼容模式。我调用/publicService.svc/ajax/logon进行登录,并尝试通过ajax检索/User/Home.aspx。
问题:在本地开发机器(win7)和我的测试服务器(2003 + IIS6 + .net4)上,它没有问题。但是在生产服务器上,登录请求将成功,但身份验证将不起作用。
web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" name="party" />
</authentication>
一些发现:如果我访问生产服务器,我发现缺少身份验证cookie。
在正常工作的服务器上:
logon:
Request Cookies: ASP.NET_SessionId: xxxxx
Response Cookies: party: xxxxx
Home.aspx:
Request Cookies: ASP.NET_SessionId: xxxxx
party: xxxxx
到目前为止一直很好,但是在有问题的服务器上:
logon:
Request Cookies: ASP.NET_SessionId: xxxxx
Response Cookies: party: xxxxx
Home.aspx:
Request Cookies: ASP.NET_SessionId: xxxxx
此处缺少身份验证Cookie。因此,身份验证无效。
可能的原因是什么?所有请求都在同一个域下,因此这里没有跨域问题
答案 0 :(得分:0)
这真是太蠢了! 服务器时间配置为一年前,当我更正它时,一切都开始工作
答案 1 :(得分:0)
尝试添加:
ticketCompatibilityMode="Framework40"
使其成为
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" name="party"
ticketCompatibilityMode="Framework40"/>
</authentication>
根据msdn “一个值,指示是否使用协调世界时(UTC)或本地时间作为故障单到期日期。”