Отговорът на IIS 7.5 не съдържа setCookie, когато User-Agent = CasperJS

HTTP заглавката, изпратена от CasperJS, съдържа:

...
 - User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) CasperJS/1.0.2+Phantomjs/1.8.2 Safari/534.34
...

Отговорът не съдържа стойност SetCookie!

Когато променя потребителския агент ръчно:

PageSettings: {
        userAgent: "User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
    }

Всичко работи добре. Използвам ASP.Net MVC.

Как да го поправя от страната на сървъра?


person Igor Shubin    schedule 05.03.2013    source източник
comment
усещам, че това може да са възможности на браузъра.   -  person Daniel A. White    schedule 05.03.2013


Отговори (2)


Това вероятно е така, защото времето за изпълнение определя възможностите на вашия браузър въз основа на заглавката на потребителския агент. Опитайте да го изключите по този начин (или по подобен начин), за да опитате дали помага:

  // Global.asax.cs
  void Application_OnBeginRequest( object sender, EventArgs e )
  {
         HttpApplication app = ( HttpApplication )sender;
         HttpContext ctx = app.Context;

         ...
         if (
              ctx.Request != null &&
             !string.IsNullOrEmpty( ctx.Request.UserAgent ) &&
              ctx.Request.UserAgent.Contains( "CasperJS" )
             )
             ctx.Request.Browser.Adapters.Clear();
         ..
  }     

Фрагментът по-горе не е непременно добра идея - той напълно премахва адаптера за изобразяване (което може би не е добре!) за някои браузъри, но трябва да е добра отправна точка за нещо по-фантастично.

Надявам се това да помогне, успяхме да разрешим някои проблеми с изобразяването с фрагмента и се надявам, че помага и с проблема с бисквитките.

person Wiktor Zychla    schedule 05.03.2013
comment
Както писах, това е отправна точка. Можете да го настроите фино според вашите изисквания. Например, можете да опитате да наложите поддръжка за бисквитки избирателно за този конкретен агент. - person Wiktor Zychla; 05.03.2013

Намерих решение тук: https://stackoverflow.com/a/4816391/1010404

Поставих generic.browser в папката App_Browsers. Файлът съдържа:

<browsers>
  <browser refID="Default">
    <capabilities>
      <capability name="cookies" value="true" />
    </capabilities>
  </browser>
</browsers>

И всички работят добре.

person Igor Shubin    schedule 05.03.2013
comment
Това също не може да е добра идея, тъй като бисквитките се превръщат безусловно. Сигурни ли сте, че искате това? - person Wiktor Zychla; 05.03.2013
comment
Да, аз съм. Това е коригирано в ASP.NET 4.5 и се предполага, че всички браузъри поддържат бисквитки, така че допълнителният файл .browser няма да е необходим. - person Igor Shubin; 05.03.2013