Jag har ett irriterande problem jag inte förstår. Bakgrund: Jag har i mitt projektarbete på min praktikplats byggt om deras webbsajt. Sajten är byggd som en webservice i bakändan och på detta en klient som skickar förfrågningarna. Att den kör catch saken beror antagligen på att AdminCookie är null. När du sedan försöker komma åt en egenskap som heter HasKeys och AdminCookie är null så får du en exception slängd till dig. Tack,Cookiesproblem
OK, sajten fungerar bra men nu skall jag bygga ett verktyg man skall logga in på för att kunna göra diverse saker. Lösningen skall se ut på följande sätt: En administratör loggar in, dennes loginuppgifter kontrolleras mot en databas och om uppgifterna stämmer överrens med databasen skall en cookie skrivas till klienten.
Skrivning och läsning av cookien fungerar bra så länge jag kör webservicen ensamt men när jag kör klienten kan bara cookien skrivas. Vid läsning hittas den inte alls?
Är det något speciellt vid läsning av cookie från en klient som jag kanske missar?
Så här ser mina metoder i webservicen ut för skrivning och läsning av cookien.
//Skriva cookie
public Cookie(string username, string password)
{
DateTime oDT = DateTime.Now;
//Skapar en cookie och sparar
HttpCookie AdminCookie = new HttpCookie("Admin");
AdminCookie.Values.Add("Username", username);
AdminCookie.Values.Add("Password", password);
AdminCookie.Expires = oDT.AddMinutes(30);
Context.Response.AppendCookie(AdminCookie);
}
//Hitta cookie och läsa om den innehåller något
public bool Exist()
{
try
{
HttpCookie AdminCookie = Context.Request.Cookies.Get("Admin");
//Innehåller den något?
if(AdminCookie.HasKeys)
{
return true;
}
}
catch
{
return false;
}
return false;
}
När jag kör klienten hoppar den rakt ner till catch fast den skrivit Admin-cookien stunden innan. När jag kör webservicen på samma sätt och cookien är skapad stunden innan körs den lilla if-satsen här ovanför.Sv: Cookiesproblem
Gissningsvis så är det så att när du kör själva webservicen i den webbläsare så fungerar cookies perfekt eftersom att webbläsaren har inbyggt stöd för att spara dem.
När du sedan använder din klient så har inte den klienten något stöd för att spara cookies. Det stödet finns lätt åtkomligt i .net men du måste göra lite ändringar i din proxy-klass.
Ta dig en titt i .net framework sdk eller hjälpen för vs.net och titta på den klass som är basklass till din proxy. Där ser du att den har en egenskap som heter CookieContainer. http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWebServicesProtocols.asp?frame=true
CookieContainer används för att spara cookies helt enkelt. Någon måste spara dem mellan anropen; klienten.Sv: Cookiesproblem
Jag löste det så att klienten, om vissa villkor uppfylldes på webservicen, fick skriva cookien istället.
Peter