Я устанавливаю файлы cookie как часть моего приложения mvc:
var cookie = new HttpCookie(CookieName, encryptedData)
{
Path = FormsAuthentication.FormsCookiePath,
Domain = CookieDomain,
Expires = authenticationTicket.Expiration,
HttpOnly = true,
Secure = IsSecure // true
};
response.Cookies.Add(cookie);
Теперь, если я отлаживаю, я вижу, что все работает нормально, никаких проблем, и это добавлено, и это тоже хорошо. Однако по какой-то причине, когда он фактически достигает браузера, не установлен флаг HttpOnly или Secure. Так что я немного сбит с толку ...
Я попытался установить флаги HttpOnly и Secure в записи cookie web.config в System.Web:
<httpCookies httpOnlyCookies="true" requireSSL="true" />
Теперь вот как выглядит ответ, когда его получает браузер:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Max-Age: 10000
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type, x-requested-with, *
Access-Control-Allow-Origin: http://localhost:34567
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
Set-Cookie: myCookie=53BA8AF84835A81E014B9174329D8543FBB6029B71C463C6FC1305D9F966F28EAA058FE103325C0F10A3012480FB0EF3F6C0BAC4703A6A6B725F383ADA35A5C125A0438FC42CADCB0DAB77953C967E6660E51C4113C6545220A0C2F86230F446D159D523BBE9CA4D9419A67BC44D23B9C4D0974DF2ED66C47EA7308D8E42E1C2280EA6059A23303E3BCBDF28F6BD4A3DFA92FFAB33DDAC8EC05D99310D26FBD6310252156CD28B89386B0D483D6D2E295EF33487E64468655371CC446E0B5DDBF12B3AA8218AF1FA929A98638A1AC729BA60815B86EAD9624ED1787172B585BE4E457C3568AB6EAAF4865E8468D04336FA7340AAC1BA75162FB322D436DC9BF50466F2F0FB3464ECF41C6C1F7001639DFE2AB2AD9CBFB65A292FE5FA42783DF331AA4641432647BA9672FE6D4C15F830E4DF8B38605852BCB15E5B01B862D966E2FD1D620730312982DB8AB4CE5EE0D0E40E6C3F5234DE5EBFA594036D912F07C3798ED429A2552AD6C4B9EC10B90749850CBDEC97F0BF7E2E43CB3991608C5D533B6EA9F8D0A7AD949B42CD3BAA13DEE99C330121B3D868B412A3435FA01C7F223641CFE441A2E07F5DFB8B23F053CBA13F5E1262A07FBFD4EC4BADF9BD5898; expires=Wed, 27-Feb-2013 19:15:24 GMT; path=/
Date: Wed, 27 Feb 2013 18:45:24 GMT
Content-Length: 2
Так я что-то здесь упускаю? или есть что-то, чего я не устанавливаю где-то там, где мне следовало бы быть? Я также использую CORS, потому что этот файл cookie выдается с веб-сервера в качестве механизма аутентификации. SSL включен и также используется для звонков через https. Даже если я отключу безопасные файлы cookie и использую http, флаг HTTPOnly тоже не будет установлен, поэтому я сбит с толку.
=== Обновление ===
После двойной проверки оказалось, что я вас дезинформировал, ответ HttpOnly отправляется с сервера правильно при первом получении cookie, ОДНАКО! когда вызов ajax затем отправляет файл cookie на сервер, кажется, что он не добавляет флаг httponly, что означает, что выбрасываемый файл cookie больше не является таким безопасным. Защищенная часть cookie не отправляется при первом ответе, но, по крайней мере, это добавляет немного больше контекста ко всему этому.