2

以前将我的 mvc 应用程序从 mvc2 更新到 mvc 3,上周更新到 mvc 4。还将它从 IIS6 服务器移动到 IIS7 服务器。

现在很多通过 mvc 路由生成的 url 在 url 中都有 token。像这样:

http://domain.net/(F(D4379600E44F6AF6D4695965E697E4EF18E37E9D4A33EF1DFAC33B05D8BD1C3601EC6D41276ADE9048699F26558469FB12118644813DE200464A082F0250855D8AC0825CAA33DFF40092C74D3B3AA0440D2547DEFE320118B53A1C43149B9E616D8579D2DFC35225E06055C3E4F8FF37F610729E))/page/something

此令牌适用于页面上所有 url 的 70%,甚至适用于图像。它看起来像无 cookie 浏览器的 Forms Auth 令牌。但我在 web.config 中禁用了 cookieless(仅将其设置为 cookie)。它还适用于所有浏览器(启用了 cookie),即使用户未登录也是如此。

如何解决这个问题?有任何想法吗?想想,升级到新的 mvc 时我错过了一些东西。

UPD。尝试以下一种方式禁用 cookieless(web.config):

<sessionState cookieless="false" />
<authentication mode="Forms">
  <forms loginUrl="~/LogOn" timeout="2880" cookieless="UseCookies"  />
</authentication>

UPD1。我在母版页中使用了几个 RenderAction 命令来呈现一些一般的局部视图。和这些部分的控制器方法,我用 OututCache 属性标记。删除了这个属性 - 现在所有的 url 看起来都不错。这很奇怪,但帮助了我。

<%Html.RenderAction("BlogPosts", "Widgets", new RouteValueDictionary()); %> 


[ChildActionOnly]
    //[OutputCache(Duration = 180)]
    public ActionResult BlogPosts()
    {
        var model = new BlogListModel();
        model.BlogPostType = defService.BlogType();
        model.List = widgetService.BlogPosts(3);
        return PartialView("Widgets/BlogPostsWidget", model);
    }
4

1 回答 1

0

我同意其他评论者的观点,这可能是由cookieless会话状态属性引起的。各种站点表明,如果您将cookieless属性设置为true,则 URL 将嵌入会话 ID。

示例:http://yourserver/folder/(此处为会话 ID)/default.aspx

OutputCache似乎与无 cookie 实现无关。

您所做的web.config更改可能不是立竿见影的。这有点模棱两可,但为了安全起见,您应该在对web.config文件进行任何更改后重新启动应用程序。

我将重新启动应用程序,取消注释您的 OutputCache 代码,构建/发布,然后查看您得到的结果。

于 2013-01-04T18:51:51.687 回答