Модуль HTTP и файлы cookie в Sharepoint 2007 - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть некоторый проверочный концептуальный код для модуля HTTP.Код проверяет, существует ли cookie, если это так, он извлекает значение, если cookie не существует, он создает его и задает значение.

После того, как это сделано, я пишу на экран, чтобы увидеть, какое действиебыл взят (все красиво и просто).Итак, по первому запросу создается cookie;последующие запросы извлекают значение из cookie.

Когда я проверяю это на обычном веб-сайте asp.net, все работает правильно - ура!Однако, как только я передаю его в SharePoint, происходит что-то странное, cookie никогда не сохраняется, то есть код всегда переходит к созданию cookie и никогда не использует ветвь для получения значения - независимо от обновления страницы или вторичных запросов.

Вот код ...

public class SwithcMasterPage : IHttpModule
{       

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void Init(HttpApplication context)
    {
        // register handler
        context.PreRequestHandlerExecute += new EventHandler(PreRequestHandlerExecute);
    }

    void PreRequestHandlerExecute(object sender, EventArgs e)
    {
        string outputText = string.Empty;

        HttpCookie cookie = null;
        string cookieName = "MPSetting";

        cookie = HttpContext.Current.Request.Cookies[cookieName];
        if (cookie == null)
        {
            // cookie doesn't exist, create
            HttpCookie ck = new HttpCookie(cookieName);
            ck.Value = GetCorrectMasterPage();
            ck.Expires = DateTime.Now.AddMinutes(5);
            HttpContext.Current.Response.Cookies.Add(ck);

            outputText = "storing master page setting in cookie.";
        }
        else
        {
            // get the master page from cookie
            outputText = "retrieving master page setting from cookie.";
        }

        HttpContext.Current.Response.Write(outputText + "<br/>");
    }

    private string GetCorrectMasterPage()
    {
        // logic goes here to get the correct master page
        return "/_catalogs/masterpage/BlackBand.master";

    }

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

Оказалось, что это аутентификация веб-приложения.Для корректной работы необходимо использовать FQDM, настроенное для проверки подлинности с помощью форм.

0 голосов
/ 09 сентября 2010

Вы можете использовать Fiddler или FireBug (в FireFox), чтобы проверить ответ и проверить, отправляется ли ваш файл cookie.Если нет, то, возможно, вы можете попробовать свою логику в PostRequestHandlerExecute.Это предполагает, что Sharepoint или какой-то другой фрагмент кода работает с файлами cookie ответа.Таким образом, вы можете быть последним, кто добавил cookie.

...