2010-09-09 9 views
0

J'ai un code de concept de preuve pour un module HTTP. Le code vérifie si un cookie existe, si c'est le cas, il récupère une valeur, si le cookie n'existe pas, il le crée et définit la valeur. Une fois ceci fait j'écris à l'écran pour voir quelle action a été prise (tout est gentil et simple). Ainsi, à la première demande, le cookie est créé; les demandes suivantes récupèrent la valeur du cookie.Module HTTP et cookies dans Sharepoint 2007

Lorsque je l'ai testé sur un site Web asp.net normal, tout fonctionne correctement - yay! Cependant, dès que je le transfère à SharePoint, quelque chose de bizarre se produit, le cookie n'est jamais sauvegardé - le code se branche toujours dans la création du cookie et ne prend jamais la branche pour récupérer la valeur - sans tenir compte des actualisations de pages ou des requêtes secondaires.

Heres le code ...

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"; 

    } 

Répondre

0

Cela s'est avéré être l'authentification de l'application Web. Pour fonctionner correctement, vous devez utiliser un FQDM configuré pour l'authentification par formulaire.

0

Vous pouvez utiliser Fiddler ou Firebug (FireFox) pour inspecter la réponse pour voir si votre cookie est envoyé. Si ce n'est pas le cas, vous pouvez peut-être essayer votre logique dans PostRequestHandlerExecute. C'est supposer que Sharepoint ou un autre morceau de code bricoler avec des cookies de réponse. De cette façon, vous pouvez être le dernier à ajouter le cookie.