Потеря сеанса / файлов cookie при кодировании - как я могу оставаться на своем сайте?

1

Вот код, который я запускаю:

$zf1 = $this->getModule('ZF1');
$zf1->_loadPage('POST', '/user/login', $params);
$zf1->setCookie('PHPSESSID', $zf1->grabCookie('PHPSESSID'));

Результат выглядит следующим образом:

[Page] /user/login
[Response] 200
[Request Cookies] []
[Response Headers] []
[Session] []
[Cookie Jar] []
[Cookie Jar] ["PHPSESSID=; path=/; httponly"]

В нем нет заголовков или файлов cookie.

Я пытаюсь проверить вход в сайт, получить файл cookie, а затем настроить cookie для выполнения другого действия.

Также тестируется с использованием модуля REST:

$this->getModule('REST')->sendPOST('/user/login', $params);
$this->debugSection('Cookies', $this->getModule('REST')->client->getCookieJar()->all());

Который также не возвращает cookie, хотя он имеет заголовок Set-Cookie:

[Request headers] []
[Request] POST https://www.domain.com/user/login {"email":"[email protected]","password":"testing"}
[Response] <html> ....html goes here..... </html>
[Headers] {"Date":["Thu, 10 Dec 2015 07:29:07 GMT"],"Server":["Apache/2.4.16 (Unix) PHP/7.0.0 OpenSSL/0.9.8zg"],"X-Powered-By":["PHP/7.0.0"],"Set-Cookie":["PHPSESSID=d8ov6rpd7ggg00npe4dinubpi7; path=/"],"Expires":["Thu, 19 Nov 1981 08:52:00 GMT"],"Cache-Control":["no-store, no-cache, must-revalidate"],"Pragma":["no-cache"],"Content-Length":["866"],"Content-Type":["text/html; charset=UTF-8"]}
[Status] 200
[Cookies] [{}]

Что происходит? Я использую Codeception версии 2.1.4 и PHP 7. Я также просто попытался с PHP 5.5 с тем же результатом. И запустил "композиторское обновление", но это ничего не изменило.

codeception.yml

actor: Tester
paths:
    tests: tests
    log: tests/_output
    data: tests/_data
    support: tests/_support
    envs: tests/_envs
settings:
    bootstrap: _bootstrap.php
    suite_class: \PHPUnit_Framework_TestSuite
    colors: true
    memory_limit: 1024M
extensions:
    enabled:
        - Codeception\Extension\RunFailed
modules:
    config:
        Db:
            dsn: 'mysql:host=127.0.0.1;dbname=somedb_test'
            user: 'root'
            password: ''
            dump: tests/_data/dump.sql
            populate: true
            cleanup: false
            reconnect: true

functional.suite.yml:

class_name: FunctionalTester
modules:
    enabled:
        - ZF1:
        - Db
        - \Helper\Functional
        - REST:
            depends: PhpBrowser
            url: 'https://www.domain.com'
    config:
        ZF1:
            env: testing
            config: application/configs/application.ini
            app_path: application
            lib_path: library

ОБНОВИТЬ

Теперь... Я просто очень смущен. Я могу войти в систему, но после того, как я попытаюсь вызвать _request() в моем помощнике, он теряет сессию?? Например,

Я могу использовать $I-> amOnPage (...), и он переходит на страницу, но затем я пытаюсь выполнить _request(), вызов запроса больше не имеет сеанса?

Он делает следующее, и он четко записывается, но затем теряет сеанс?:

    $I->amOnPage('/');
    $I->login();
    $I->amOnPage('/user/questions');
    $I->see('No active questions');
    $I->sendPOST('/chat/upload', $params, $files);

sendPOST:

$this->getModule('ZF1')->_loadPage('POST', $uri, $params, $files);

Существует аналогичный вопрос, уже опубликованный, но он отличается от моей проблемы (Codeception: Keep in logged in state)

Если я заменил sendPost на amOnPage, он будет поддерживать сеанс (wtf???)

Теги:
testing
cookies
codeception

1 ответ

0
Лучший ответ

По-видимому, определение вспомогательного метода, называемого sendPOST, противоречило sendPOST в модуле REST, поэтому он фактически не выполнял мой код. Я переименовал его, тогда он начал работать. И, сообщается в код: https://github.com/Codeception/Codeception/issues/2627

У меня были оба модуля ZF1 и REST, включенные в моем function.suite.yml.

В моем вспомогательном классе FunctionalTester в \Helper\Functional.php у меня был метод, называемый sendPOST. При вызове sendPOST из моего класса * Cest он будет выполнять sendPOST в модуле REST. После переименования sendPOST на что-то еще это сработало.

Это правда, мне, вероятно, не нужно одновременно загружать оба модуля ZF1/REST (еще новичок в этой вещи кода), но даже в этом случае он никогда не вызывал ошибку, что был дублированный метод sendPOST и приводил к путанице. В идеале это вызовет исключение из повторяющихся методов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню