Newsgroup: it.comp.www.php
Titolo: problema con $_SESSION['var'] cambia lo stato

Premessa sono alle prime armi non siate cattivi e per di più provengo
dall'asp. Seconda premessa sul server session.auto_start è 0 e register
global è ON su server win 2000 php 4.3.6.
Problema:
condividere informazioni da una pagina all'altra senza coockie
Ho usato:
session_start();
  if (isset($_POST["name"]) && $_POST["name"]=="admin"){
  $_SESSION['sessione'] = 0;
  header("Location: 
http://localhost/php/phppage/privata.php
");
  exit;
 }
in una pagina con un form banalissimo che richiama se stesso e poi chiama la
pagina privata che riporta il seguente codice:
session_start(); //se non metto questo nella nuova pagina non funziona un
tubo
 if($_SESSION['sessione'] == session_id())
 {
  echo "_Session: ".$_SESSION['sessione'];
 }
  else
  {
   echo "Attenzione accesso non consentito ! Sessione:
".$_SESSION['sessione'];
   //session_unregister(); // con o senza non funzica
      exit;
  }

 
Inserisci 
http://www.php.net/session_write_close
 prima di header
("Location ...") oppure utilizza:
[promo]
http://setecastronomy.stufftoread.com/go.php?ID=8
[/promo]
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 ("Location ...") oppure utilizza:
scusa ma qui se ne perso un pezzo



No guarda a parte che non è attivata la trans-sid( e non ci posso fare
niente sul server o esiste un comando per farlo da script?) poi anche se uso
il session_write_close cmq la $_SESSION['sessione'] non è mai impostata.
bohhh ?

 non h mai impostata. 
Scusa, ma nel primo script scrivi:
$_SESSION['sessione'] = 0;
e nel secondo verifichi:
if($_SESSION['sessione'] == session_id())
che ovviamente sara' sempre falso visto che da nessuna parte imposti
$_SESSION['sessione'] = session_id().



cmq il codice normalmente dovrebbe funzionare senza cambiare le impostazioni
di default vero ?
provenendo dall'asp registravo l'id in una variabile di sessione che si
propagava automaticamente in tutte le pagine in cui la controllavo non
riesco ad utilizzare lo stesso metodo non sò dove sbaglio.

 non riesco ad utilizzare lo stesso metodo non sr dove sbaglio.
<?php // file a.php
session_start ();
$_SESSION['key'] = 'value';
session_write_close ();
header ('Location: b.php?' . SID);
exit;
?>
<?php // file b.php
session_start ();
print ($_SESSION['key']);
?>



Ok questo metodo passa l'id tramite querystring ti ringrazio ma non mi sta
bene dato che non voglio che l'id di sessione venga passato in questo modo
ma deve rimanere solo sul server.
Allora ho apportato delle modifiche al mio codice e adesso farò dei test
anche in base ai tuoi suggerimenti vedrò e poi al limite interrogherò di
nuovo il gruppo.
Grazie molte per ora.
Daniele

 Daniele
se ho ben capito quello che vuoi fare allora non è possibile..
non puoi registare il session id in una variabile di sessione e poi
richiamarlo senza avere il session id.. e se lo avessi a quel punto sarebbe
inutile ottenerlo..
il SID non può rimanere nel server e solo in esso.. lo devi passare al
browser con un cookie, get, post od un qualsiasi altro metodo..
-- 
www.iuz-lab.info

 questo modo ma deve rimanere solo sul server.
Se vuoi fare quato significa che non sai che cosa siano le sessioni.
Il sessionID DEVE essere passato al client altrimenti non c'e' alcuna
possibilita' di propagare le sessioni.
-- 
I am what I am, I do what I can



Allora vi posto il codice per togliere ogni dubbio (magari mi incasino io a
spiegare):
file pubblica.php
<?php
session_start();
/*
 * Created on 28-ott-2004
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 //echo session_id();
 if (isset($_POST["name"]) && $_POST["name"]=="admin"){
  $_SESSION['sessione'] = session_id();
  //$_SESSION['sessione'] = 0;
  session_write_close();
  //header("Location: 
http://localhost/php/phppage/privata.php
");
  header("Location: 
http://www.zeuscomputerweb.it/php/privata.php
");
  exit;
 }
 else
 {
  unset($_SESSION['sessione']);
 }
?>
<html>
<body>
<form action="pubblica.php" method="POST">
 Il tuo Nome: <input type="text" name="name" value="" />
 La tua et&agrave;: <input type="text" name="age" value ="" />
 <input type="submit">
</form>
<form action="aggiornadb.php" method="POST">
 <input type="submit">
</form>
</body>
</html>
file privata.php
<?php
/*
 * Created on 27-ott-2004
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 session_start();
 //print session_id();
 //if(isset($_SESSION['sessione']) && $_SESSION['sessione'] == session_id())
 echo $_SESSION['sessione']." <- Questa è la variabile di sessione attuale
<br>";
 if($_SESSION['sessione'] == session_id())
 {
  echo "_Session: ".$_SESSION['sessione'];
  session_write_close();
 }
  else
  {
   echo "Attenzione accesso non consentito ! Sessione:
".$_SESSION['sessione'];
   //session_unregister();
   //session_unset($_SESSION['sessione']);
   exit;
  }
?>
<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="PHPEclipse 1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Pagina Privata</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966"
alink="#FFCC99">
  <form action="inviamailconallegato.php" method="post"
enctype="text/plain">
   <input type="submit" name="name" value="LOGOUT"/>
  </form>
</body>
</html>
queste due pagine funzionano correttamente ora ma se avete suggerimenti sono
ben accetti.
Daniele