我正在使用SimpleMembership开发一个ASP.NET MVC4项目,它在你登录时生成一个ASPXAUTH cookie。它似乎工作得很好,但是今天我打开了另一个MVC4项目,只是注意到我已登录。
这非常奇怪,因为新项目字面上没有在数据库中定义任何用户。更令人不安的是,当我在新项目上点击“退出”时,它将我从原始网站中删除。
两个站点都在不同的端口上运行,但都在localhost上运行。当检查请求以查看它返回“IsAuthenticated == true”的原因时,我注意到ASPXAUTH cookie被发送到两个站点,并且调试器中cookie的“domain”参数为“null”。这让我觉得可能cookie正在生成为“无域”cookie(我不知道这样的事情是否可能,说实话!),并查看了web.config设置以指定域名:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" />
</authentication>
不幸的是,设置“domain”参数已使cookie停止运行。我已经尝试了所有排列(使用http,没有http,有端口,没有端口等),每次我指定一个域时,浏览器都会收到带有正确指定域名的cookie(我在Chrome开发人员工具中检查过它),但随后无法将其发送回后续请求的服务器。
所以,我对这里发生的事情感到很困惑。这是否是由于未在某处正确设置某些内容而导致的安全漏洞?或者,ASPXAUTH cookie将在同一域上的两个不同端口上的两个完全不同的Web应用程序上授权用户,这是完全正常的行为吗?我会在网络主机上对此进行测试,但遗憾的是我目前无法访问任何运行MVC4的内容。
提前致谢。
答案 0 :(得分:5)
ASPXAUTH是cookie的默认名称,但是通过在Web.Config中为每个项目更改此名称,您可以使其仅适用于该项目。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" name=".PROJ1AUTH"/>
</authentication>
答案 1 :(得分:3)
向表单元素添加名称属性。它会在您提供的名称后命名authcookie,使其在其他项目之间保持唯一。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="A_UNIQUE_NAME" />
</authentication>