problemi di sessione con php 5.04

salve,

vi scrivo per avere il vostro aiuto nel risolvere un problema di funzionamento delle sessioni, infatti da quando ho insatllatto php 5.04 con apache 2.54 su windows xp non riesco più a visualizzare il valore di  una variabile trasportata da una pagina all'altra con la procedura delle sessioni, nonostante che il file di sessione nella cartella si crei.

lo script che ho usato è il seguente:

pagina 1:

<?

session_start();

$movie="The Incredible";

session_register(movie);

echo "<A HREF='movie2.php?<?=sid?>'>Il nuovo film della Pixar</A>";

?>

pagina 2:

<?

session_start();

$vis=$_SESSION[movie];

echo $vis;

?>

by odinos

inviato 11 anni fa
odino
X 0 X

Ciao odino,

il tuo utilizzo delle sessioni mischia vecchie funzioni, ormai obsolete, quali session_register(), con il più recente array superglobale $_SESSION. Non so a che risultati possa portare e quindi ti consiglio di uniformarti alle nuove tecniche di programmazione delle sessioni. Per un tutorial quarda qui:

http://www.phpnews.it/content/view/74/80/

P.S.: gli array associativi si scivono così: $_SESSION['movie'] al posto di $_SESSION[movie]

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Grazie per la tua risposta, proverò a modificare lo script per vedere se funziona

 :2funny:

risposto 11 anni fa
odino
X 0 X

il corretto approccio è il seguente:

pagina 1:

<?php
session_start();
$_SESSION['movie'] ='The Incredible';

echo "<A HREF='movie2.php'>Il nuovo film della Pixar</A>";
?>

pagina 2:

<?php
session_start();
echo $_SESSION['movie'];
?>

Fammi sapere se funziona.

Ciao.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

???

Grazie per lo script che mi hai postato, l'ho provato ma non funziona del tutto.

quando clicco sul link il valore della variabile non viene visualizzato nella pagina successiva, inoltre nella barra dell'indirizzo del browser compare solo il percorso ma non il valore che viene trasportato tramite la sessione.

Altra nota e che nella cartella temporanea dove vanni i file di sessione compaiono due file di cui uno solo contiene il valore della variabile.

Il mio sistema è composto da:

Windows xp professional;

Apache  vers.2.54;

PHP 5.04 senza installer

Puoi darmi una mano con le informazioni che ti ho fornito ?

Grazie By

Odino

risposto 11 anni fa
odino
X 0 X

Nella barra degli indirizzi non deve comparire nulla. I valori contenuti nella sessione non vengono passati attraverso l'URL.

Non so cosa suggerirti, visto che se vengono creati i file di sessione significa che le sessioni stanno funzionando...

Prova a mettere come prima istruzione di ogni pagina questa riga:

error_reporting(E_ALL);

serve per aumentare il livello di segnalazione di errori di PHP al massimo.

Inoltre verifica che il browser o qualche altro programma non stiano impedendo l'uso dei cookie (Internet explorer a volte non si fida dei siti "locali" e ne blocca i cookies). Prova ad usare magari un altro browser (ad es. Firefox)

Fammi sapere.

Ciao.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ciao

 Ti disturbo ancora ma purtroppo non riesco a capire da cosa  dipende questo problema, in basso troverai un errore uscito rilevato dalla funzione che tu mi hai consigliato di usare:

Ho modificato  lo script per la rivelazione degli errori ed è uscito la seguente scritta:

Notice: Undefined index: movie in C:\Inetpub\miosito\sessioni\movie2.php on line 4

NOTE: Aprendo nel browser il file movie compare nella cartella del file temporanei di sessione il file che contiene la variabile ed il  suo valore, nel momento in cui vado a cliccare sul link del file movie.php si va a creare nella cartella dei file si sessione un secondo file vuoto.

 Ho notato inoltre che nella cartella dei cookies non si crea nessun file.

Non è un problema di browser poiché è impostato per accettare i cookie, inoltre gli script di php con le sessioni funzionavano prima di aggiornare il tutto.

La mia precedente configurazione riguardava le seguenti versioni:

IIS 5.0

PHP 4.1.2

Mysql 3.1.2 ( la vesione  attuale installata è la 4.1.12)

Ti copia una parte del file php.ini riguardante la configurazione della sessione.

[Session]

; Handler used to store/retrieve data.

session.save_handler = files

; Argument passed to save_handler.  In the case of files, this is the path

; where data files are stored. Note: Windows users have to change this

; variable in order to use PHP's session functions.

;

; As of PHP 4.0.1, you can define the path as:

;

     session.save_path = "c:\php\sessiontmp"

;

; where N is an integer.  Instead of storing all the session files in

; /path, what this will do is use subdirectories N-levels deep, and

; store the session data in those directories.  This is useful if you

; or your OS have problems with lots of files in one directory, and is

; a more efficient layout for servers that handle lots of sessions.

;

; NOTE 1: PHP will not create this directory structure automatically.

;         You can use the script in the ext/session dir for that purpose.

; NOTE 2: See the section on garbage collection below if you choose to

;         use subdirectories for session storage

;

; The file storage module creates files using mode 600 by default.

; You can change that by using

;

;     session.save_path = "N;MODE;/path"

;

; where MODE is the octal representation of the mode. Note that this

; does not overwrite the process's umask.

;session.save_path = "/tmp"

; Whether to use cookies.

session.use_cookies = 0

; This option enables administrators to make their users invulnerable to

; attacks which involve passing session ids in URLs; defaults to 0.

; session.use_only_cookies = 1

; Name of the session (used as cookie name).

session.name = PHPSESSID

; Initialize session on request startup.

session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.

session.cookie_lifetime = 0

; The path for which the cookie is valid.

session.cookie_path = \

; The domain for which the cookie is valid.

session.cookie_domain =

; Handler used to serialize data.  php is the standard serializer of PHP.

session.serialize_handler = php

; Define the probability that the 'garbage collection' process is started

; on every session initialization.

; The probability is calculated by using gc_probability/gc_divisor,

; e.g. 1/100 means there is a 1% chance that the GC process starts

; on each request.

session.gc_probability = 1

session.gc_divisor     = 100

; After this number of seconds, stored data will be seen as 'garbage' and

; cleaned up by the garbage collection process.

session.gc_maxlifetime = 1440

; NOTE: If you are using the subdirectory option for storing session files

;       (see session.save_path above), then garbage collection does *not*

;       happen automatically.  You will need to do your own garbage

;       collection through a shell script, cron entry, or some other method.

;       For example, the following script would is the equivalent of

;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):

;          cd /path/to/sessions; find -cmin +24 | xargs rm

; PHP 4.2 and less have an undocumented feature/bug that allows you to

; to initialize a session variable in the global scope, albeit register_globals

; is disabled.  PHP 4.3 and later will warn you, if this feature is used.

; You can disable the feature and the warning separately. At this time,

; the warning is only displayed, if bug_compat_42 is enabled.

session.bug_compat_42 = 0

session.bug_compat_warn = 0

; Check HTTP Referer to invalidate externally stored URLs containing ids.

; HTTP_REFERER has to contain this substring for the session to be

; considered as valid.

session.referer_check =

; How many bytes to read from the file.

session.entropy_length = 0

; Specified here to create the session id.

session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; Set to {nocache,private,public,} to determine HTTP caching aspects

; or leave this empty to avoid sending anti-caching headers.

session.cache_limiter = nocache

; Document expires after n minutes.

session.cache_expire = 180

; trans sid support is disabled by default.

; Use of trans sid may risk your users security.

; Use this option with caution.

; - User may send URL contains active session ID

;   to other person via. email/irc/etc.

; - URL that contains active session ID may be stored

;   in publically accessible computer.

; - User may access your site with

;   always using URL stored in browser's history or bookmarks.

session.use_trans_sid = 0

; Select a hash function

; 0: MD5   (128 bits)

; 1: SHA-1 (160 bits)

session.hash_function = 0

; Define how many bits are stored in each character when converting

; the binary hash data to something readable.

;

; 4 bits: 0-9, a-f

; 5 bits: 0-9, a-v

; 6 bits: 0-9, a-z, A-Z, "-", ","

session.hash_bits_per_character = 4

Grazie By

Odino

risposto 11 anni fa
odino
modificato 11 anni fa
X 0 X

L'errore che hai ricevuto è normale poiché, non funzionando le sessioni, il PHP non ricorda il valore di quella variabile e quindi ti avvisa.

Comunque credo di aver capito perché le sessioni non vanno. Forse già sai che le sessioni si "propagano" da una pagina all'altra attraverso l'invio di un ID (session ID) che viaggia o nell'URL o in un cookie dal server al client e viceversa  (per chiarimenti leggi l'articolo sulle sessioni).

Nel tuo php.ini sono disabilitate entrambe le modalità di propagazione del session ID.

Per usare i cookie devi mettere a 1 la direttiva session.use_cookies (consigliato)

Per usare invece l'URL devi mettere a 1 la direttiva session.use_trans_sid (sconsigliato per ragioni di sicurezza)

Fammi sapere se funziona.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Purtroppo non funziona

lo  script è il seguente:

per il file movie2.php

Esce sempre lo stesso avviso di errore sulla linea 4 ed i cookie non si formano nell'apposita cartella

La modifica eseguita nel file php.ini da te suggerita è stata fatta:

; Whether to use cookies.

session.use_cookies = 1

Hai idea da cosa possa dipendere

Ancora grazie

By odino

risposto 11 anni fa
odino
X 0 X

hai riavviato IIS (o windows)?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho installato apache.

IIS è installato solo per l'FTP

La macchina è stata riavviata

BY odino

risposto 11 anni fa
odino
X 0 X

allora metti anche il session.use_trans_sid a 1 così vediamo se è un problema di cookie. Hai provato con un altro browser?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Attuando l'ultima modifica da te suggerita la sessione funziona.

L'ho testato sia su explorer che su firefox.

Secondo te come mai non funziona se non si attiva sessio.use_trans_id ?

by odino

risposto 11 anni fa
odino
X 0 X

Il problema sta nel fatto che il browser non accetta i cookie. Hai provato con firefox le sessioni con i cookie?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Prima dell'ultima modifica anche firefox non funzionava visualizzando lo stesso errore di explorer, inoltre explorer in precedenza usando lo stesso script non mi aveva dato problemi di sorta. I problemi sono sorti quando ho aggironato php.

Una curiosità, se ho attivato i cookie non dovrebbe creare un file all'interno della carrella cookie del S.O. ?

Bu odino

risposto 11 anni fa
odino
X 0 X

Ti ringrazio dell'aiuto che mi hai dato e buon fine settimana

By odino

 O0

risposto 11 anni fa
odino
X 0 X

se i cookie sono temporanei, ovvero se scadono con la chiusura del brawser allora non vengono salvati sul'HD ma sono solo in memoria. La direttiva del php.ini è la seguente:

; Lifetime in seconds of cookie or, if 0, until browser is restarted.

session.cookie_lifetime = 0

Adesso bisognerebe capire se PHP sta effettivamente inviando il cookie di sessione...

Buon fine settimana anche a te.

Ciao.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

cioa

So che sto approfittando ma colgo l'occasione per chiederti se impostando le seguenti righe nel file php.ini:

session.cookie_path=c:\cook

session.cookie_lifiteime=120

le sessioni dovrebbero creare dei cookie dalla durata di due minuti nella cartella cook.(Explorer è impostasto per accettare tutti i cookie)

Altra cosa che vorrei chiederti è l'uso del sid nei link.

l'impostazione attuale è:

sessio.use_trand_id=1 il che significa che è attivo e quindi non è necessario l'uso del sid, se invece disabilito la variabile dovrebbe essere necessario per la propagazione della sessione l'uso di sid nel link.

Se ciò che ho scritto non è una fesseria, qual'è la sintassi dell'uso del sid ?

Ancora una volta grazie

By odino

risposto 11 anni fa
odino
X 0 X

Il session.cookie_path non riguarda il luogo in cui verranno salvati i cookies sul client (quello lo decide il browser) ma specifica se il cookie deve essere considerato solo per le pagine del sito collocate in qualche particolare sottocartella. Quindi il path è riferito al server. Lascia quindi l'impostazione di default.

Con session.cookie_lifiteime imposti la durata in secodi del cookie di sessione. Impostandola a 120 fai si che il browser sia costretto a conservare il cookie per 2 minuti, anche se il browser viene chiuso. In questo caso quindi il browser salverà sull'HD il cookie in quei caratteristici file di testo.

Non ha molto senso preoccuparsi di come far propagare l'ID di sessione. E' il PHP a preoccuparsi di doverlo fare, e userà la tecnica (cookie o URL) impostata nel php.ini.

Quindi perché dovresti implementare "manualmente" l'accodamento a tutti i links del session ID quando ti basta porre session.use_trans_sid a 1?

Comunque dovresti indagare sul motivo che non ti permette di usare i cookie. Allega (non copia) tutto il tuo php.ini così gli do un'occhiata.

Se hai altri dubbi non esitare.

A presto.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ti allego il file php.ini.

Sinceramente non saprei dove vedere per controllare il funzionamento dei cookie. ti posso solo dire che il browser li accetta poichè i cookie provenienti da internet me li ritrovo tutti nella cartella cookie del S.O.

Ti ringrazio per l'aiuto che mi stai dando.

By odino

[allegato eliminato dall\' amministratore]

risposto 11 anni fa
odino
X 0 X

cambia

session.cookie_path = \

in

session.cookie_path = /

...e speriamo sia la volta buona!

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Nella cartella cookie del S.O. non compare nessun file nuovo ergo suppongo che la modifica fatta non abbia avuto effetto.

P.s. Il server apache è stato riavviato dopo la modifice nel file php.ini

 Sorry

odino

risposto 11 anni fa
odino
X 0 X

poiché nel php.ini c'è l'impostazione:

session.cookie_lifetime = 0

i cookie non verranno creati, ma saranno solo nella memoria del browser.

Sicuro che le sessioni adesso non funzionano? Comunque mantieni la modifica che ti ho suggerito. L'impostazione precedente era sbagliata. Non dimenticare di fare le prove sempre con entrambi i browser.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

I cookie adesso funzionano ed i file nella cartella dei cookie vengono creati, impostando la variabile dei cookie sessio.cookie_lifetime a 120

Grazie dell'aiuto, ma non ti preoccupare ho già un altro problema da esporti riguardante la metodologia di estrazione di  una immagine da mysql, se l'argomento è di tua competenza. Nel caso lo fosse te ne parlerò la prossime volta.

Di nuovo grazie, il tuo aiuto mi è stato davvero prezioso

 Alla prossima

risposto 11 anni fa
odino
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda