asp.net mvc - Ställa in cookies över underdomän javascript-fälla
Hjälp behövs för att möjliggöra att en cookie kan användas över underdomäner. Kan inte ställa in cookien till rätt värde i JavaScript. Jag är inte säker på om JavaScript misslyckas med att ställa in cookien eller om MVC.NET avvisar begärandecookien.
Webbläsare fungerar inte
- Chrome 43 (Windows)
- Firefox 38 (Windows)
- iOS 8 Safari
När jag ställer in min web.config för att använda <httpCookies domain=".adomain.com" /> börjar saker gå fruktansvärt fel.
Jag har lite javascriptkod, tillsammans med pickadate.js datumväljare som ändrar cookie-värdet till det datum som en användare har valt.
Javascript-funktion
// Call pickadate API to retrieve selected date
var dateString = this.get('select', 'dd/mm/yyyy');
var cd = new Date();
var exp = cd.setMinutes(cd.getMinutes() + 10)
setCookie("_date", dateString, new Date(exp), "/", ".adomain.com");
window.location.reload();
function setCookie(name, value, expires, path, theDomain, secure) {
value = escape(value);
var theCookie = name + "=" + value +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((theDomain) ? "; domain=" + theDomain : "") +
((secure) ? "; secure" : "");
document.cookie = theCookie;
}
Vad .NET gör när det tar emot förfrågan När datumväljaren har ändrats, kommer sidan att uppdateras och skicka en ny förfrågan med datumet i cookien. Detta tas emot av en MVC.NET-kontroller. Dock ändras inte cookien på klientsidan.
if(this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("_date"))
{
cookie.Value = this.ControllerContext.HttpContext.Request.Cookies[sessionDate].Value;
// Do some logic with date to retrieve products
} else {
// Set cookie.value to today's date
}
cookie.HttpOnly = false;
cookie.Path = "/";
cookie.Secure = true;
this.ControllerContext.HttpContext.Response.Cookies.Set(cookie);
HTTP-förfrågan innehåller följande duplicat för _date:
_date=30/07/2015;
_date=31/07/2015;
men datumet borde vara 31/07/2015, men jag har dubbletter. Domänerna är olika i Chrome-resursfliken.
_date=30/07/2015; domain=.adomain.com << JAG BEHÖVER ATT DETTA ÄR DOMÄNSINSTÄLLNING _date=30/07/2015; domain=sub.adomain.com
Svar #1
Även om jag inte är en .NET-expert, är det möjligt att uttryckligen ange domänen för kakan i Set-Cookie-headern. Enligt RFC 6265, om du anger domänen i headern som example.com så skulle kakan också vara tillgänglig för www.example.com och subdomain.example.com. Subdomäner anses inte som externa domäner och därför är det inte en säkerhetsöverträdelse.
Förmodligen bör det fungera att lägga till något liknande detta innan du skickar kakan i din controller
cookie.Domain = "adomain.com";Svar #2
Detta är inte möjligt av säkerhetsskäl. detaljerad information här
Du kan försöka använda en iFrame för att ställa in cookien som Facebook gör detta.