Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #21348 > unrolled thread

cookie in ambiente CLI

Started byalex <1j9448a02@lnx159sneakemail.com.invalid>
First post2017-01-09 17:30 +0100
Last post2017-01-11 15:27 +0000
Articles 5 — 3 participants

Back to article view | Back to it.comp.www.php


Contents

  cookie in ambiente CLI alex <1j9448a02@lnx159sneakemail.com.invalid> - 2017-01-09 17:30 +0100
    Re: cookie in ambiente CLI fmassei@gmail.com - 2017-01-09 08:54 -0800
    Re: cookie in ambiente CLI Alessandro Pellizzari <shuriken@amiran.it> - 2017-01-09 18:56 +0000
      Re: cookie in ambiente CLI alex <1j9448a02@lnx159sneakemail.com.invalid> - 2017-01-11 11:37 +0100
        Re: cookie in ambiente CLI Alessandro Pellizzari <shuriken@amiran.it> - 2017-01-11 15:27 +0000

#21348 — cookie in ambiente CLI

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2017-01-09 17:30 +0100
Subjectcookie in ambiente CLI
Message-ID<o50dqu$1oro$1@gioia.aioe.org>
<?php // test.php
setcookie('id', 123);
echo $_COOKIE['id']."\n";
?>

Proviamo ad eseguirlo da terminale

$ php test.php
PHP Notice:  Undefined index: id in tesr.php on line 3

Visto che siamo in ambiente CLI non c'è da stupirsi dell'errore alla riga 3.
Ma allora perchè la funzione setcookie() non da nessun errore? Non 
dovrebbe essere in accordo.....  ???
Non è che il cookie 'id' viene memorizzato da qualche altra parte?

In pratica la domanda generale sarebbe: c'è un modo per testare i cookie 
in ambiente cli?

[toc] | [next] | [standalone]


#21349

Fromfmassei@gmail.com
Date2017-01-09 08:54 -0800
Message-ID<c4ea601d-d7cd-4591-8c38-68cf0ddd33c8@googlegroups.com>
In reply to#21348
On Monday, January 9, 2017 at 11:30:25 AM UTC-5, alex wrote:
> In pratica la domanda generale sarebbe: c'è un modo per testare i cookie 
> in ambiente cli?
>

Tendenzialmente la setcookie la richiama in una classe che gestisce i cookies
(probabilmente insieme ad altra business logic); per metterla in test si fa un
mock-up.

Ciao!

[toc] | [prev] | [next] | [standalone]


#21350

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2017-01-09 18:56 +0000
Message-ID<edi4m3F66edU1@mid.individual.net>
In reply to#21348
Il Mon, 09 Jan 2017 17:30:23 +0100, alex ha scritto:

> <?php // test.php setcookie('id', 123);
> echo $_COOKIE['id']."\n";
> ?>
> 
> Proviamo ad eseguirlo da terminale
> 
> $ php test.php PHP Notice:  Undefined index: id in tesr.php on line 3

In realtà esce lo stesso errore anche su un browser:

<?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    setcookie('id', 123);
    echo $_COOKIE['id']."\n";


( ! ) Notice: Undefined index: id in /...cookie.php on line 5
Call Stack
#	Time	Memory	Function	Location
1	0.0000	355808	{main}( )	.../cookie.php:0

Questo perché setcookie() manda solo l'header, non aggiorna la superglobal 
$_COOKIE

Siccome PHP inizializza le superglobal quando parte, non c'è modo di 
metterci qualcosa (se non modificandole direttamente e manualmente) in 
ambiente CLI: quando lo script viene eseguito sono già state 
inizializzate.

> In pratica la domanda generale sarebbe: c'è un modo per testare i cookie
> in ambiente cli?

No, per quanto ho detto prima.

L'unico modo è far partire un webserver (anche quello integrato di PHP), 
fare una richiesta tramite curl o simile, e verificare gli header di 
quello che ti torna indietro.

O usare una classe per gestire i cookies e mockarla durante i test.

Bye.

[toc] | [prev] | [next] | [standalone]


#21351

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2017-01-11 11:37 +0100
Message-ID<o551tg$u3l$1@gioia.aioe.org>
In reply to#21350
Il 09/01/2017 19:56, Alessandro Pellizzari ha scritto:
> Siccome PHP inizializza le superglobal quando parte, non c'è modo di
> metterci qualcosa (se non modificandole direttamente e manualmente) in
> ambiente CLI: quando lo script viene eseguito sono già state
> inizializzate.

if (!isset($_COOKIE['abc'])) {
    //manomissione...
    $_COOKIE['abc'] = random();
}

però manomettere una variabile globale... è una pratica consigliabile?

[toc] | [prev] | [next] | [standalone]


#21352

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2017-01-11 15:27 +0000
Message-ID<edn173Fc9ulU1@mid.individual.net>
In reply to#21351
On 11/01/2017 10:37, alex wrote:

> Il 09/01/2017 19:56, Alessandro Pellizzari ha scritto:

>> Siccome PHP inizializza le superglobal quando parte, non c'è modo di
>> metterci qualcosa (se non modificandole direttamente e manualmente) in
>> ambiente CLI: quando lo script viene eseguito sono già state
>> inizializzate.
>
> if (!isset($_COOKIE['abc'])) {
>    //manomissione...
>    $_COOKIE['abc'] = random();
> }
>
> però manomettere una variabile globale... è una pratica consigliabile?

No, non in codice normale come questo.

Ma se stai scrivendo un test che testi il caso specifico, può essere 
tollerato. In pratica costruisci l'ambiente prima del test.

Ma proprio per questo, di solito, si wrappa l'accesso all'ambiente in 
classi dedicate. A quel punto queste "porcherie" le farai solo nei test 
delle classi wrapper, mentre in tutto il resto del codice semplicemente 
usi la classe "Web" o quella "CLI", o fai un mock che presenti valori 
deterministici ai fini del test.

Bye.

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.www.php


csiph-web